4

このように構造化された 2 つの JSON を取得しました。最初のものは API からのものです:

[
  {
   "course_code":"Basic 101 - 0913",
   "name":"Basic 101",
   "start_at":"2013-09-16T00:00:00+02:00",
   "end_at":"2013-10-13T23:55:00+02:00",
   "workflow_state":"available"
  },
  {"course_code":"Medium 201 - 0913",
   "name":"Medium 201",
   "start_at":"2013-08-06T16:55:25+02:00",
   "end_at":null,
   "workflow_state":"available"
  }
]

2 つ目は、データベースからの JSON エクスポートです。

[
  {
   "id":1,
   "course_id":"Basic 101",
   "name":"Basic Level",
   "description":"blablabla",
   "discipline_id":"1",
   "duration":"28",
   "created_at":null,
   "updated_at":null
  },
  {
   "id":2,
   "course_id":"Medium 201",
   "name":"Medium Level",
   "description":"blablabla",
   "discipline_id":"1",
   "duration":"28",
   "created_at":null,
   "updated_at":null
  }
]

:nameこれら 2 つの JSON を 1 つにマージして、最初の JSON と2 番目の JSONを一致させたいと思います:course_id

Rails で JSON を使用するための優れたチュートリアルを知っていれば、私は非常に興味があります。

4

2 に答える 2

5

これは実際には JSON の問題ではありません。

JSON データを解析すると、配列とハッシュが返されます。

この場合、それをマージする 1 つの方法は、データをループして、必要な/一致する必要があるパラメーターを確認することです。一致が見つかったら、必要なデータを使用して手動で新しいハッシュを作成するか、使用できます

hash1.merge(hash2)

http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge

これは、両方のハッシュで構成されるハッシュを返します。同じ名前の属性は、最初のハッシュで上書きされます。

于 2013-08-07T12:35:54.900 に答える
4

どこに行くべきかを知らせるための簡単な答えです。最初の json が変数にjson1あり、2 番目がjson2変数にあると仮定すると、このコードは次のようになります。

require 'json'

arr1 = JSON.parse(json1)
arr2 = JSON.parse(json2)
mrg = []
arr1.each do |el1|
  arr2.each do |el2|
    if el2['course_id'] == el1['name']
      mrg.push(el1.merge(el2))
    end
  end
end

p mrg

印刷します:

[
  {
   "course_code"=>"Basic 101 - 0913",
   "name"=>"Basic Level", 
   "start_at"=>"2013-09-16T00:00:00+02:00", 
   "end_at"=>"2013-10-13T23:55:00+02:00", 
   "workflow_state"=>"available", 
   "id"=>1, 
   "course_id"=>"Basic 101", 
   "description"=>"blablabla", 
   "discipline_id"=>"1", 
   "duration"=>"28", 
   "created_at"=>nil, 
   "updated_at"=>nil
  },
  {
   "course_code"=>"Medium 201 - 0913", 
   "name"=>"Medium Level", 
   "start_at"=>"2013-08-06T16:55:25+02:00", 
   "end_at"=>nil, 
   "workflow_state"=>"available", 
   "id"=>2, 
   "course_id"=>"Medium 201", 
   "description"=>"blablabla", 
   "discipline_id"=>"1", 
   "duration"=>"28", 
   "created_at"=>nil, 
   "updated_at"=>nil
  }
]
于 2013-08-07T12:39:48.290 に答える