私はこのテストデータを持っています:
[
{
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
このクエリは、実行していることに対して機能するはずです。
$..[?(@.id==7)]
IDだけでなくオブジェクト全体を選択するため、$..
の直後のIDを削除する必要があります。また、クエリを囲む角かっこもありませんでした。
このクエリは、次の結果セットを返します。
[
{
"id": 7,
"l": "g"
}
]
Lプロパティの値を取得したいだけの場合(すでにIDを知っているため)、それも簡単に実行できます。クエリの最後に.l
を追加するだけです。
$..[?(@.id==7)].l
これにより、次の結果セットが返されます。
[
"g"
]
このオンラインjsonパステスターツールとプランカーを使用して、ここで最初のクエリをテストしました: http://www.jsonquerytool.com/sample/jsonpathfilterallbypropertyvalue