使用 Ruby 过滤嵌套的 JSON 对象并使用特定键获取 JSON

Filter through nested JSON object and obtain JSON with specific keys, using Ruby

我目前有一个类似于

的嵌套 JSON 对象
{
"People": [
    {
        "Name": "James",
        "Age": "18",
        "Gender": "Male",
        "Sports": []
    },
    {
        "Name": "Sarah",
        "Age": "19",
        "Gender": "Female",
        "Sports": [
            "Soccer",
            "Basketball",
            "Football"
        ]
    }
] 
}

作为 Ruby 的新手,我的目标是过滤整个 json 和 return,仅过滤 json object/objects,其中 "Sports" 数组有内容。所以在上面的场景中,我希望获得下面的对象作为最终结果:

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

我是否必须启动一种新方法来执行此类操作?或者在这种情况下使用常规 ruby 调用是否可行?

如果您从请求中得到一个 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

尽管@philipyoo 的回答是正确的,但它遗漏了关于如何 "filter" 解析的 JSON 的解释。如果您是 ruby 的新手,请查看 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