2016-03-29 30 views
2

我现在有一个嵌套JSON对象其类似于过滤,将获得JSON与特定按键,使用Ruby

{ 
"People": [ 
    { 
     "Name": "James", 
     "Age": "18", 
     "Gender": "Male", 
     "Sports": [] 
    }, 
    { 
     "Name": "Sarah", 
     "Age": "19", 
     "Gender": "Female", 
     "Sports": [ 
      "Soccer", 
      "Basketball", 
      "Football" 
     ] 
    } 
] 
} 

作为新到红宝石,我的目标是过滤throught整个JSON并且仅返回JSON对象/“体育”数组中包含内容的对象。因此,在上述情况下我希望获得下面的对象作为最终结果:

{ 
     "Name": "Sarah", 
     "Age": "19", 
     "Gender": "Female", 
     "Sports": [ 
      "Soccer", 
      "Basketball", 
      "Football" 
     ] 
    } 

请问我要开始执行这种行为的新方法?或者在这种情况下使用普通的ruby调用?

回答

2

虽然@philipyoo答案是正确的,它错过了如何“过滤器”解析JSON的解释。如果你是新的红宝石,看看Array#keep_ifhttp://ruby-doc.org/core-2.2.0/Array.html#method-i-keep_if

require 'json' 

people = JSON.parse("{long JSON data ... }") 
people_with_sports = people.fetch('People', []).keep_if do |person| 
    !person.fetch('Sports', []).empty? 
end 
+0

这只是沿着什么我要找的线路。然而,运行这似乎检索“未定义的方法”获取'“错误。我尝试过使用'map'或'each do',并且我得到相同的'undefined method'错误 – Iqen

+0

你能告诉我确切的错误吗? “XXX类未定义的方法错误”。什么是XXX课程?你能给我更多关于'人'变量内容的信息吗? 我的猜测是它不是哈希。可能是由于JSON内容。 – dvxam

+0

没关系。这是我的错误。你的回答正是我所期待的。 – Iqen

2

如果您从请求中获取JSON对象,则需要解析它,然后可以遍历散列和数组以找到所需的信息。见http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html

在你的情况,这样的事情:

require 'json' 

parsed_json = JSON.parse('{"People": [ ... ]}') 

parsed_json["People"].each do |person| 
    puts person if person["name"] == "Sarah" 
end