【问题标题】:XPath/JSONPath search of arrays数组的 XPath/JSONPath 搜索
【发布时间】:2018-03-06 21:55:50
【问题描述】:

我们的 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/ 有示例

【问题讨论】:

    标签: json xpath jmeter jsonpath


    【解决方案1】:

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

    parse-json($data)?*?id
    

    【讨论】:

      【解决方案2】:

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

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

      演示:

      参考资料:

      【讨论】:

        【解决方案3】:

        尝试在特定级别选择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

        【讨论】:

          猜你喜欢
          • 2016-03-30
          • 2013-08-09
          • 2012-01-25
          • 1970-01-01
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-10
          相关资源
          最近更新 更多