我有一个看起来像这样的JSON数组.
[
{"name":"Idaho","state":{"id":1,"name":"A"}},
{"name":"Wyoming","state":{"id":1,"name":"A"}},
{"name":"Montana","state":{"id":2,"name":"B"}},
{"name":"South Dakota","state":{"id":1,"name":"B"}}
]
Run Code Online (Sandbox Code Playgroud)
我如何使用Ruby仅显示A的值?
我不认为sort_by会是答案,因为我在下面的内容只是按字母顺序对它们进行排序.我想完全排除B的所有结果.
.sort_by { |a| [a.state.name] }
Run Code Online (Sandbox Code Playgroud)
在.rb文件中执行此操作的最有效方法是什么?
我解决了自己的问题.这就是我实现我想要的方式.
.select { |a| a.state.name == "A" }
Run Code Online (Sandbox Code Playgroud)
require 'json'
json = <<'JSON_STRING'
[
{"name":"Idaho","state":{"id":1,"name":"A"}},
{"name":"Wyoming","state":{"id":1,"name":"A"}},
{"name":"Montana","state":{"id":2,"name":"B"}},
{"name":"South Dakota","state":{"id":1,"name":"B"}}
]
JSON_STRING
data = JSON.parse json
data.map(&:values).select { |state, values| values["name"] == ?A }
#=> [["Idaho", {"id"=>1, "name"=>"A"}], ["Wyoming", {"id"=>1, "name"=>"A"}]]
data.map(&:values).select { |state, values| values["name"] == ?A }.map(&:first)
#=> ["Idaho", "Wyoming"]
Run Code Online (Sandbox Code Playgroud)