質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2255閲覧

railsから送られてきたjsonデータが正常に表示されない

kensho-

総合スコア6

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/06/09 14:48

編集2021/06/09 23:48

フロントのreact側でgetリクエストし、railsでdataを生成して、json形式に変換し、
フロント側に返す処理をしているのですが、データをうまくjson形式でフロント側に渡せません。
どなたか問題の原因が分かる方おりましたらご教授お願い致します

rails側

ruby:app/controllers/api/v1/line_foods_controller.rb

1module Api 2 module V1 3 class LineFoodsController < ApplicationController 4 before_action :set_food, only: %i[create replace] 5 6 def index 7 line_foods = LineFood.active 8              9 p line_foods[0].restaurant  10##上のコードよりサーバー上で下記のデータが出力される 11###<Restaurant id: 1, name: "testレストラン_0", fee: 100, 12## time_required: 10, created_at: "2021-06-05 07:45:03", 13##updated_at: "2021-06-05 07:45:03"> 14 15 if line_foods.exists? 16 render json: { 17 line_food_ids: line_foods.map { |line_food|line_food.id }, 18 19 ##上記で出力されてるデータをrestaurantに格納している⬇️ 20 restaurant: line_foods[0].restaurant, 21 22 count: line_foods.sum { |line_food| line_food[:count] }, 23 amount: line_foods.sum { |line_food| line_food.total_amount }, 24 }, status: :ok 25 else 26 render json: {}, status: :no_content 27 end 28 end 29 private 30 31 def set_food 32 @ordered_food = Food.find(params[:food_id]) 33 end 34 35 36 end 37 end 38end

フロント側

javascript:frontend/src/containers/Order.jsx

1import React, { Fragment,useEffect } from 'react'; 2 3import { fetchLineFoods } from '../apis/line_foods'; 4 5export const Orders = () => { 6 useEffect(() => { 7 fetchLineFoods() 8 .then((data) => 9 console.log(data) 10 ) 11 .catch((e) => console.error(e)); 12 }, []) 13 return ( 14 <Fragment> 15  注文画面 16 17 </Fragment> 18 ) 19}

フロント側のconsoleでの出力結果⬇️

イメージ説明
上記の写真で表されているようにline_foods[0].restaurant の中身がうまく渡せていません

試したこと
フロント側でconsole.log(typeof(data.restaurant))
をしてresutaurantの型を出力したところstringと出ました

line_foods[0].restaurantをline_foods[0].restaurant.to_json()
に変換して渡してみました。
すると結果は下記のようになったのですが、文字型と認識されてしまっている?からか、出力結果がおかしくなっております

line_foods[0].restaurantをline_foods[0].restaurant.to_json()に変換した場合の出力結果⬇️

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kensho-

2021/06/09 23:51

ご回答ありがとうございます! hoshi-takanoriさんの載せてくださった記事を参照したら、データの内容はフロント側でも確認できるようになりました! しかし、受け取ったデータが文字型で認識されている?か何かで出力結果がおかしいです。 その結果を上記で編集して画像添付いたしました! 結果として restaurant: id: "1" name: "testレストラン_0 .... のような形になって出力されるのが理想なのですが、、、
kensho-

2021/06/10 00:04 編集

hoshi-takanoriさん 先ほどto_jsonをas_jsonに変えたところ 無事解決できました! 欲しかった形でデータを受け取ることができました! 本当にありがとうございます!!
kensho-

2021/06/10 00:05

hoshi-takanoriさん 大変お手数ですがas_jsonの投稿内容を回答欄にコピペして投稿していただけませんでしょうか?? ベストアンサーにしたいと考えております。
guest

回答1

0

ベストアンサー

Rails 詳しくないんですが、line_foods[0].restaurant をそのまま JSON に変換すると "#Restaurant:〜" という文字列になってしまうということですよね。
たぶん何らかの方法で適切な JSON データに変換する必要があり、to_json だと直接 JSON 文字列 ("{"id":1,"name":〜") になってしまうのでやりすぎってことで、as_json を使えば良さそうです。
参考: Railsにおけるto_jsonとas_json - コード日進月歩

投稿2021/06/10 00:17

hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kensho-

2021/06/10 01:33

hoshi-takanoriさん ご回答ありがとうございます! いただいた回答で解決することができました!
kensho-

2021/06/10 01:33

as_jsonとすればしっかりjsonデータとして渡せるということですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問