使用Ruby按值过滤JSON数组

使用Ruby按值过滤JSON数组,ruby,arrays,json,Ruby,Arrays,Json,我有一个类似这样的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"}} ] 我如何使用Ruby来只显示A的值 我不认为sort_by是答案

我有一个类似这样的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"}}
]
我如何使用Ruby来只显示A的值

我不认为sort_by是答案,因为我下面的内容只是按字母顺序排序。我想完全排除B中的所有结果

.sort_by { |a| [a.state.name] }
在.rb文件中执行此操作最有效的方法是什么


我解决了自己的问题。这就是我如何实现我想要的

.select { |a| a.state.name == "A" }
require'json'
json=1,“名称”=>“A”}],“怀俄明州”{“id”=>1,“名称”=>“A”}]]
map(&:values)。选择{| state,values | values[“name”]==?A}.map(&:first)
#=>[“爱达荷州”、“怀俄明州”]
需要“json”
arr=JSON.parse不正确:

.select { |a| a.state.name == "A" }
正确的方法:

.select { |a| a['state']['name'] == 'A' }

a.state.name
是在JavaScript中实现的方法,但在Ruby中这是
a['state']['name']
。同样值得一读的是方法。或者,
str.scan(/[a-Z][a-zA-Z\s]+(?=。+:\“a\”+?$)/)=>[爱达荷州”,“怀俄明州]
.select { |a| a.state.name == "A" }
.select { |a| a['state']['name'] == 'A' }