XPath/JSONPath 搜索数组

XPath/JSONPath search of arrays

我们的 REST API 正在返回一个嵌套对象数组。使用 XPath 或 JSONPath,我想提取每个顶级数组对象的 id 元素,但不提取子元素的 id 元素。

[
   {
      "id":"1",
      "child":{
         "id":"a"
      }
   },
   {
      "id":"2",
      "child":{
         "id":"b"
      }
   }
]

预期输出为 1、2 而不是 1、a、2、b。

任何人都可以帮助查询语法吗?我在 http://jsfiddle.net/dqvrfvc1/2/

有例子

尝试在特定级别选择 id

search = JSON.search(data, '/*/*/id')

在此处查看更新:http://jsfiddle.net/dqvrfvc1/5/

如果我们将 XML 转储到控制台 (console.log(JSON.toXML(data));),我们会看到:

<d:data xmlns:d="defiant-namespace" d:constr="Array" d:mi="9">
    <d:item d:mi="4">
        <id d:constr="String" d:mi="1">1</id>
        <child d:mi="3">
            <id d:constr="String" d:mi="2">a</id>
        </child>
    </d:item>
    <d:item d:mi="8">
        <id d:constr="String" d:mi="5">2</id>
        <child d:mi="7">
            <id d:constr="String" d:mi="6">b</id>
        </child>
    </d:item>
</d:data>

这意味着我们可以更具体地使用:

而不是 /*/*/id
search = JSON.search(data, '/d:data/d:item/id')

注意:无法选择命名空间,因此似乎不需要将 d: 命名空间前缀绑定到 defiant-namespace uri。

此外,查看 http://defiantjs.com 的 "XPATH EVALUATOR" 部分并在 XML 和 JSON 视图之间切换以查看 JSON 是如何表示的在 XML。这将帮助您了解数据结构以及在什么级别可以找到 id

鉴于您的标签中有 jmeter,这里有一个解决方案:

JSON 路径表达式应如下所示:$[*].id

演示:

参考文献:

您提到了 XPath:在 XPath 3.1 中,这是

parse-json($data)?*?id