Alt eleman durumuna göre jsonpath kullanarak kök eleman alın
Benim tipimin phoneNumbers
'iPhone' olduğu JSON'un altından doğru 'kimliği' elde etmek için Jayway JsonPath kitaplığıyla çalışıyorum .
Genel olarak, alt JSON nesnelerinde belirli bir koşul belirtildiğinde bir bloğun kök öğesinden bir şeyi nasıl bulacağımı bilmek istiyorum.
İPhone tipiyle ilişkili bloğu seçen ifadeleri ve sırasıyla bir kimlik listesini denedim, ancak id
telefon tipimin iPhone olduğu JSON nesnesine ait kök öğeye ulaşamıyorum. Biri bana rehberlik edebilir mi lütfen? id
Bu soru için 1 almam gerekiyor .
Kimliklerin listesini almak için: $[*].id
İPhone türüne karşılık gelen json nesnesini almak için: $[*].phoneNumbers[?(@.type=='iPhone')]
[
{
"id": "1",
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
},
{
"type": "home",
"number": "0123-4567-8910"
}
]
},
{
"id": "2",
"phoneNumbers": [
{
"type": "x",
"number": "0123-4567-8888"
},
{
"type": "y",
"number": "0123-4567-8910"
}
]
}
]
Yanıtlar
Bence ifadenin daha derin görünmesini istiyorsun.
İlk olarak, telefon numaraları listesinde iPhone'u olan nesneleri bulun. Ardından kimlikleri seçin.
Deneyin $[?(@.phoneNumbers[*].type=="iPhone")].id
.
Düzenle
Görünüşe göre Java JsonPath kitaplığı (bunu kullandığınızı düşünüyorum) bir dizi işlevi destekliyor. Listede a yok contains()
, ancak anyof
operatörü deneyebilirsiniz :
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Bunun kesinlikle uygulamaya özgü olduğunu ve başka herhangi bir kitaplıkla çalışmayacağını unutmayın.