JSONPath检查谓词

时间:2017-01-04 21:02:27

标签: javascript jsonpath

在XPath中,可以采用以下方法:

XML:

<root>
    <parent>
        <child>
            <descendant status="passed">1</descendant>
            <descendant status="passed">2</descendant>
        </child>
    </parent>
    <parent>
        <child>
            <descendant status="passed">3</descendant>
            <descendant status="failed">4</descendant>
        </child>
    </parent>
</root>

XPath: //parent[.//*[@status='failed']]

结果: /root/parent[2]

(即获取任何后代状态为“失败”的任何父节点

使用Google's JSONPath implementation,以下内容不起作用:

JSON:

{
  parents: [{
      children: [{
          descendants: [{
              name: 1,
              status: "passed"
            }, {
              name: 2,
              status: "passed"
            }
          ]
        }
      ]
    }, {
      children: [{
          descendants: [{
              name: 3,
              status: "passed"
            }, {
              name: 4,
              status: "failed"
            }
          ]
        }
      ]
    }
  ]
}

JSONPath: $.parent[?(@..status=='failed')]

结果: Uncaught SyntaxError: jsonPath: Unexpected token .: _v..status=='failed'

实际上,谓词中出现..*会导致类似的错误。 e.g。

  1. $.parent[?(@..status)]会导致Unexpected token .: _v..status
  2. $.parent[?(@.*)]导致Unexpected token *: _v.*
  3. 我也试过dchester/jsonpath's implementation并遇到同样的问题,所以我不确定JSONPath是否支持这种行为。我甚至不确定是谁定义了JSONPath的规范。

    问题: JSONPath可以实现吗? (即获取parents中包含status == "failed" 的任何后代但未明确写出路径的元素数组

0 个答案:

没有答案