Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 当我只期望一个结果时,我的jsonpath表达式返回两个结果_Ruby_Jsonpath - Fatal编程技术网

Ruby 当我只期望一个结果时,我的jsonpath表达式返回两个结果

Ruby 当我只期望一个结果时,我的jsonpath表达式返回两个结果,ruby,jsonpath,Ruby,Jsonpath,这段ruby代码返回[1,1],但我希望只得到[1]。如果我使用相同的文本和jsonpath表达式,则得到[1]。这是“jsonpath”gem中的一个bug吗 require 'jsonpath' string = <<-HERE_DOC [ {"processId":1,"process":"XX"}, {"processId":2,"process":"YY"} ] HERE_DOC jsonpath = "$..[?(@.process=='XX')].pr

这段ruby代码返回[1,1],但我希望只得到[1]。如果我使用相同的文本和jsonpath表达式,则得到[1]。这是“jsonpath”gem中的一个bug吗

require 'jsonpath'

string = <<-HERE_DOC
[
    {"processId":1,"process":"XX"},
    {"processId":2,"process":"YY"}
]
HERE_DOC
jsonpath = "$..[?(@.process=='XX')].processId"

path = JsonPath.new(jsonpath)
result = path.on(string)
puts "result: #{result}"
需要“jsonpath”

string=问题似乎是额外的一点,在jsonpath表达式中,如果没有这一点,在两种行为中的工作原理类似,您只需要执行一步:

[1] pry(main)> require 'jsonpath'
=> true
[2] pry(main)> jsonpath = "$.[?(@.process=='XX')].processId"
=> "$.[?(@.process=='XX')].processId"
[3] pry(main)> path = JsonPath.new(jsonpath)
=> #<JsonPath:0x00007f8c5bf42f10
 @opts={},
 @path=["$", "[?(@.process=='XX')]", "['processId']"]>
[4] pry(main)> string = <<-HERE_DOC
[4] pry(main)* [
[4] pry(main)*     {"processId":1,"process":"XX"},
[4] pry(main)*     {"processId":2,"process":"YY"}
[4] pry(main)* ]
[4] pry(main)* HERE_DOC
=> "[\n    {\"processId\":1,\"process\":\"XX\"},\n    {\"processId\":2,\"process\":\"YY\"}\n]\n"
[5] pry(main)> result = path.on(string)
=> [1]
[1]pry(main)>需要“jsonpath”
=>正确
[2] pry(main)>jsonpath=“$.[?(@.process=='XX')].processId”
=>“$.[?(@.process='XX')].processId”
[3] pry(main)>path=JsonPath.new(JsonPath)
=> #
[4] 撬动(主)>string=result=path.on(字符串)
=> [1]

谢谢你@anquegi。有点令人惊讶的是,原始版本居然可以工作——尽管JSONPath实现之间不一致。