代码之家  ›  专栏  ›  技术社区  ›  Ross Attrill

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

  •  0
  • Ross Attrill  · 技术社区  · 6 年前

    这段ruby代码返回[1,1],但我希望只得到[1]。如果我把相同的文本和jsonpath表达式 http://jsonpath.com 然后我得到[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}"
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   anquegi    6 年前

    问题似乎是多余的一点,在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]
    

    jsonpath web example