繁体   English   中英

使用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并仅返回“ Sports”数组具有内容的json对象。 因此,在上述情况下,我希望获得以下对象作为最终结果:

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

我是否必须启动一种新方法来执行此操作? 还是在这种情况下使用常规的红宝石电话会起作用?

如果要从请求中获取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答案是正确的,但它缺少有关如何“过滤”已解析的JSON的解释。 如果您不Array#keep_if红宝石,请看看Array#keep_ifhttp: Array#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM