我需要找到某个散列元素,其中一个键等于某个值。我尝试了很多方法,但似乎无法用jsonpath gem解决这个问题。
需要获取grip == 'bad'所在位置的tire标签
require "jsonpath"
hash = {
:id => 1,
:cars => [
{:id => 1, :tire => {:grip => "good", :color => "black"}},
{:id => 2, :tire => {:grip => "bad", :color => "red"}},
{:id => 3, :tire => {:grip => "good", :color => "green"}}
]
}
puts JsonPath.on(hash, "$..tire[?(@['grip'] == 'bad')]").inspect无结果。
发布于 2012-12-20 23:31:56
[?()]筛选器只对数组有效(或者至少对数组或散列有效,不能同时对两者都有效)。为了让它正常工作,我必须将:tire散列包含在一个数组中。
原件:
:tire => {:grip => "good", :color => "black"}新的:
:tire => [{:grip => "good", :color => "black"}]这是一个对我有效的“修复”。如果有人修复了jsonpath gem,使其同时适用于数组和散列(同一类型的散列),那会更好。
发布于 2012-11-17 02:55:14
在JsonPath.on中,第一个参数必须是json,而不是哈希。
我不能在ruby上这样做,它不是完全正确的解决方案。但这可能会对你有所帮助。
require 'jsonpath'
require 'json'
hash = {
:id => 1,
:cars => [
{:id => 1, :tire => {:grip => "good", :color => "black"}},
{:id => 2, :tire => {:grip => "bad", :color => "red"}},
{:id => 3, :tire => {:grip => "good", :color => "green"}}
]
}
json = hash.to_json
obj = JsonPath.new( "$..tire")[json]
result = obj.inject(Array.new){|res, x| res << x if x["grip"]=='bad'; res }
p result # [{"grip"=>"bad", "color"=>"red"}]https://stackoverflow.com/questions/13422607
复制相似问题