使用jsonpath获取父节点

时间:2017-01-26 16:52:43

标签: jsonpath

使用节点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")]

3 个答案:

答案 0 :(得分:2)

您没有指定JSON Path的哪个实现,但是使用Gatling(Scala)和JayWay(Java),您可以使用嵌套过滤器在返回父级,祖父级或其他内容时按子级进行过滤。这是一个示例:

使用此JSON:

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

这条道路:

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

返回:

[ "bar" ]

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

其他一些实现错误地表达了这些表达式。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

查询:

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

返回:

["bar"]

查询:

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

返回:

[]
相关问题