4

我有两个这样结构的 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"
  }
]

第二个是从我的数据库导出的 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
  }
]

我想将这两个 JSON 合并为一个,:name在第一个 JSON 和:course_id第二个 JSON 中匹配。

如果你知道在 Rails 中使用 JSON 的好教程,我真的很感兴趣。

4

2 回答 2

5

这不是真正的 JSON 问题。

解析 JSON 数据时,它会返回数组和哈希值。

在这种情况下合并它的一种方法是遍历数据并检查您想要/需要匹配的参数。找到匹配项后,您可以使用所需数据手动创建新哈希,也可以使用

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,第二个在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 回答