Alt eleman durumuna göre jsonpath kullanarak kök eleman alın

Aug 18 2020

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 idtelefon tipimin iPhone olduğu JSON nesnesine ait kök öğeye ulaşamıyorum. Biri bana rehberlik edebilir mi lütfen? idBu 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

gregsdennis Oct 06 2020 at 03:16

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 anyofoperatö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.