Dapatkan elemen root menggunakan jsonpath berdasarkan kondisi sub elemen

Aug 18 2020

Saya bekerja dengan pustaka Jayway JsonPath untuk mendapatkan 'id' yang benar dari bawah JSON di mana phoneNumberstipe saya adalah 'iPhone'.

Secara umum, saya ingin tahu bagaimana menemukan sesuatu dari elemen root sebuah blok ketika kondisi tertentu ditentukan dalam objek sub-JSON.

Saya mencoba ekspresi di bawah ini yang memilih blok yang terkait dengan jenis iPhone dan juga daftar id masing-masing, tetapi saya tidak bisa mendapatkan elemen root idmilik objek JSON di mana jenis ponsel saya adalah iPhone. Bisakah seseorang membimbing saya? Saya perlu mendapatkan idsebagai 1 untuk pertanyaan ini.

Untuk mendapatkan daftar id: $[*].id

Untuk mendapatkan objek json yang sesuai dengan tipe iPhone: $[*].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"
            }
        ]
    }
]

Jawaban

gregsdennis Oct 06 2020 at 03:16

Saya pikir Anda ingin ekspresi Anda terlihat lebih dalam.

Pertama, temukan objek yang memiliki iPhone di daftar nomor telepon. Kemudian pilih saja ID-nya.

Coba $[?(@.phoneNumbers[*].type=="iPhone")].id.


Edit

Sepertinya pustaka Java JsonPath (saya rasa Anda menggunakan ini) mendukung sejumlah fungsi. Itu tidak mencantumkan contains(), tetapi Anda dapat mencoba anyofoperator:

$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id

Perhatikan bahwa ini pasti khusus untuk penerapan dan kemungkinan besar tidak akan berfungsi dengan pustaka lain.