当我期望只有一个时,我的 jsonpath 表达式 returns 有两个结果
My jsonpath expression returns two results when I expect just one
这段 ruby 代码 returns [1,1] 但我希望只得到 [1]。如果我通过 http://jsonpath.com 放置相同的文本和 jsonpath 表达式,那么我会得到 [1]。这是 'jsonpath' gem 中的错误吗?
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表达式中没有这个在两种行为中的作用相似,你只需要往下走一步:
[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]
这段 ruby 代码 returns [1,1] 但我希望只得到 [1]。如果我通过 http://jsonpath.com 放置相同的文本和 jsonpath 表达式,那么我会得到 [1]。这是 'jsonpath' gem 中的错误吗?
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表达式中没有这个在两种行为中的作用相似,你只需要往下走一步:
[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]