web-dev-qa-db-ja.com

プロパティ値でネストされたデータ内のオブジェクトを検索(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: []
  }
];

そして、私はid: 7でオブジェクトのパスを取得しようとしています。かなりの数のJSONPathクエリを試しましたが、JSONPathですべてのsubキーを反復処理してそこで検索する方法がわからないようです。

オブジェクトをid: 7と一致させるにはどうすればよいですか?

これが私のテストプランカーです: http://plnkr.co/edit/RoSeRo0L1B2oH3wC5LdU?p=preview

13
alexandernst

このクエリは、実行していることに対して機能するはずです。

$..[?(@.id==7)]

IDだけでなくオブジェクト全体を選択するため、$..の直後のIDを削除する必要があります。また、クエリを囲む角かっこもありませんでした。

このクエリは、次の結果セットを返します。

[
    {
        "id": 7,
        "l": "g"
    }
]

Lプロパティの値を取得したいだけの場合(すでにIDを知っているため)、それも簡単に実行できます。クエリの最後に.lを追加するだけです。

$..[?(@.id==7)].l

これにより、次の結果セットが返されます。

[
    "g"
]

このオンラインjsonパステスターツールとプランカーを使用して、ここで最初のクエリをテストしました: http://www.jsonquerytool.com/sample/jsonpathfilterallbypropertyvalue

23
Duncan