在ruby中合并和操作JSON数组

时间:2014-06-21 19:02:29

标签: ruby-on-rails ruby ruby-on-rails-4

在我的模型中,我从facebook和twitter的api获得了两个Json数组。

facebook_friends = { "data": 
  [{"name": "Friend Joe", "id": "123"}, 
   {"name": "Friend Jane", "id": "12342"}]}
twitter_friends = { "users": 
  [{"name": "Other friend joe", "id": "333"}, 
   {"name": "Other friend Jane", "id": "456"}]}

我想构建一个这样的数组(注意:我正在附加提供程序密钥以识别数据的来源)

all_friends = [
  {"name": "Friend Joe", "id": "123", "provider": "facebook"},
  {"name": "Friend Jane", "id": "12342", "provider": "facebook"}, 
  {"name": "Other friend joe", "id": "333", "provider": "twitter"},
  {"name": "Other friend Jane", "id": "456", "provider": "twitter"}]

我可以用这样的jquery做到这一点 - > http://jsfiddle.net/gm3jJ/但我如何在红宝石中做到这一点?
感谢

2 个答案:

答案 0 :(得分:1)

您可以使用以下行来执行此操作:

facebook_array = JSON.parse('{ "data": [{"name": "Friend Joe", "id": "123"}, {"name": "Friend Jane", "id": "12342"}]}')["data"].map{|h| h.merge({'provider' => 'facebook'})}
twitter_array = (JSON.parse('[{"name": "Other friend joe", "id": "333"}, {"name": "Other friend Jane", "id": "456"}]').map{|h| h.merge({'provider' => 'twitter'})})
final_array = facebook_array.concat(twitter_array)

编辑:在执行上述代码之前,请不要忘记要求使用json:require 'json'

答案 1 :(得分:1)

如果你想组合东西,你可以这样做:

# Get the array of friends from each service and add provider
fb = JSON.parse(facebook_friends)["data"].map {|x| x["provider"] = "facebook"}
tw = JSON.parse(twitter_friends)["users"].map {|x| x["provider"] = "twitter"}
# Concatenate them into one array
fb + tw