【问题标题】:Using jsonpath to get parent node使用jsonpath获取父节点
【发布时间】:2017-06-12 05:41:09
【问题描述】:

使用节点 JSONPath,如何从子节点值中获取父节点名称

{
  "store": {
    "book": [
      {
        "id":"1",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "id":"2",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      }
    ]
  }
}

我用这个表达式根据值来识别子节点,我想用这个子节点找到父节点

$.[?(@.id =="1")]

【问题讨论】:

标签: jsonpath


【解决方案1】:

使用 JayWay 可以,但 Jayson 提供的查询是错误的,因为如果您将值更改为“foo2”,它仍然会返回“bar”。

这可以在http://jsonpath.herokuapp.com/ 上进行测试。

查询:

$.a.b[?(@.c.d.e=="foo")].something

返回:

["bar"]

查询:

$.a.b[?(@.c.d.e=="foo2")].something

返回:

[]

【讨论】:

    【解决方案2】:

    不幸的是,JSONpath 不支持在子对象的内容中按参数搜索: http://goessner.net/articles/JsonPath/

    【讨论】:

      【解决方案3】:

      您无需指定 JSON 路径的哪个实现,但在 Gatling (Scala) 和 JayWay (Java) 中,您可以使用嵌套过滤器按子级过滤,同时返回父级、祖父级或其他任何内容。这是一个示例:

      有了这个 JSON:

      {
        "a": {
          "b": {
              "c": {
                  "d": {
                      "e": "foo"
                  }
              },
              "something": "bar"
          }
        }
      }
      

      还有这条路:

      $.a.b[?(@.c[?(@.d[?(@.e == "foo")])])].something
      

      返回:

      [ "bar" ]
      

      我可以通过使用表达式来检索b 作为过滤器以到达较低的节点。

      其他一些实现在这些表达式上出错。

      【讨论】:

        猜你喜欢
        • 2012-05-15
        • 2016-05-27
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 2014-03-11
        • 1970-01-01
        • 1970-01-01
        • 2015-09-28
        相关资源
        最近更新 更多