Dapatkan elemen root menggunakan jsonpath berdasarkan kondisi sub elemen
Saya bekerja dengan pustaka Jayway JsonPath untuk mendapatkan 'id' yang benar dari bawah JSON di mana phoneNumbers
tipe 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 id
milik objek JSON di mana jenis ponsel saya adalah iPhone. Bisakah seseorang membimbing saya? Saya perlu mendapatkan id
sebagai 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
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 anyof
operator:
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Perhatikan bahwa ini pasti khusus untuk penerapan dan kemungkinan besar tidak akan berfungsi dengan pustaka lain.