按属性值在嵌套数据中查找对象(使用JSONPath)

ale*_*nst 10 javascript jsonpath

我有这个测试数据:

[
  {
    id: 1,
    l: 'a',
    sub: [
      ]
  },
  {
    id: 2,
    l: 'b',
    sub: [
      {
        id: 4,
        l: 'd'
      },
      {
        id: 5,
        l: 'e'
      },
      {
        id: 6,
        l: 'f',
        sub: [
          {
            id: 7,
            l: 'g'
          }
        ]
      }
    ]
  },
  {
    id: 3,
    l: 'c',
    sub: []
  }
];
Run Code Online (Sandbox Code Playgroud)

而我正试图获得对象的路径id: 7.我尝试了一些JSONPath查询,但我似乎无法弄清楚如何使JSONPath迭代所有sub键并在那里搜索.

我该如何匹配对象id: 7

这是我的测试插件:http://plnkr.co/edit/RoSeRo0L1B2oH3wC5LdU?p =preview

Dun*_*can 20

此查询应该适用于您正在执行的操作:

$..[?(@.id==7)]
Run Code Online (Sandbox Code Playgroud)

你需要在$..你想要选择整个对象之后删除id ,而不仅仅是id.您还错过了查询周围的方括号.

此查询返回以下结果集:

[
    {
        "id": 7,
        "l": "g"
    }
]
Run Code Online (Sandbox Code Playgroud)

如果您只想检索l属性的值(因为您已经知道了id),您也可以轻松地执行此操作.只需.l在查询结尾添加:

$..[?(@.id==7)].l
Run Code Online (Sandbox Code Playgroud)

这会返回以下结果集:

[
    "g"
]
Run Code Online (Sandbox Code Playgroud)

我使用这个在线json路径测试工具并使用你的plunker在这里测试了第一个查询:http: //www.jsonquerytool.com/sample/jsonpathfilterallbypropertyvalue