使用 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_if
:http://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
我目前有一个类似于
的嵌套 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_if
:http://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