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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

315閲覧

rails でのJSONを出力する方法

m8354825717

総合スコア20

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/12/11 07:56

前提・実現したいこと

rails でのJSONを出力する方法を探しています。

下記のソースを作成しましたが期待通りのjsonが生成されませんでした。

該当のソースコード

@user = [{"id" => 1, "name" => '太郎', "sex" => 1,'age'=>10},{"id" => 2, "name" => '花子', "sex" => 2,'age'=>15}] @detail = ["sex","age"] hash = {} num = 0 @user.each do |user| @detail.each do |detail| value = { "id" => user['id'], "name" => user['name'], detail => user[detail], } hash[num] = value num = +1 end end respond_to do |format| format.html render json: hash end

現在のJSON

{ "0": { "id": 1, "name": "太郎", "sex": 1 }, "1": { "id": 2, "name": "花子", "age": 15 } }

期待のJSON

[{ "id": 1, "name": "太郎", "sex": 1 }, { "id": 1, "name": "太郎", "age": 10 }, { "id": 2, "name": "花子", "sex": 2 }, { "id": 2, "name": "花子", "age": 15 } ]

ご教授のほどお願いいたします。

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

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

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

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

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

m8354825717

2020/12/11 08:04

どういうことでしょうか?
guest

回答2

0

ruby

1users = [{"id" => 1, "name" => '太郎', "sex" => 1,'age'=>10},{"id" => 2, "name" => '花子', "sex" => 2,'age'=>15}] 2 3@users = users.inject([]) do |array, user| 4 array << user.as_json(only: ["id", "name", "age"]) 5 array << user.as_json(only: ["id", "name", "sex"]) 6end 7 8respond_to do |format| 9 format.html 10 format.json { render json: @users } 11end 12

inject で array に追加していく際にas_json(only: []) でカラムを絞り込んでます。

もし以下のようなデータでかまわないなら、

[{ "id": 1, "name": "太郎", "sex": 1, "age": 10 }, { "id": 2, "name": "花子", "sex": 2, "age": 15 }, ]

こうするだけで良いです。

respond_to do |format| format.html format.json { render json: users.as_json(only: ["id", "name", "sex", "age"]) } end

投稿2020/12/11 15:24

編集2020/12/11 15:26
neko_daisuki

総合スコア2090

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

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

0

Rails はよく知りませんが、Hash ではなく、配列を render に渡すべきなのでは?
こういう感じでしょうか。

ruby

1array = @user.flat_map |user| 2 @detail.map do |detail| 3 { 4 'id' => user['id'], 5 'name' => user['name'] 6 detail => user['detail'] 7 } 8 end 9end 10 11respond_to do |format| 12 format.html 13 render json: array 14end

元のコードを元にした修正は以下のようになります。

ruby

1array = [] # 変更 2num = 0 3@user.each do |user| 4 @detail.each do |detail| 5 value = { 6 'id' => user['id'], 7 'name' => user['name'] 8 detail => user['detail'] 9 } 10 array[num] = value 11 num += 1 # 変更 12 end 13end

投稿2020/12/11 09:47

編集2020/12/11 09:54
taichi730

総合スコア318

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問