Saya memiliki output JSON yang berisi daftar objek yang disimpan dalam variabel. (Saya mungkin tidak mengatakan itu benar)
[
{
"item1": "value1",
"item2": "value2",
"sub items": [
{
"subitem": "subvalue"
}
]
},
{
"item1": "value1_2",
"item2": "value2_2",
"sub items_2": [
{
"subitem_2": "subvalue_2"
}
]
}
]
Saya membutuhkan semua nilai untuk item2 dalam array untuk skrip bash untuk dijalankan di ubuntu 14.04.1.
Saya telah menemukan banyak cara untuk mendapatkan seluruh hasil ke dalam array tetapi tidak hanya item yang saya butuhkan
jq . <<< "$json"
itu terkait shell (bash), tidak spesifik untukjq
arr=( $(...) )
jq
perintah, tapi tolong jangan parse output perintah ke dalam sebuah array denganarr=( $(...) )
(meskipun itu terjadi kerja dengan input sampel): itu tidak bekerja sebagaimana dimaksud dengan tertanam atau terkemuka / trailing spasi dan dapat mengakibatkan globbing disengaja.Berikut ini sebenarnya buggy:
Sebaliknya, gunakan:
... atau, bahkan lebih baik ...
sumber
Berkat sputnick saya dapat ini:
JSON yang saya miliki adalah output dari API. Yang perlu saya lakukan adalah menghapus argumen file dan menyalurkan
|
output dari curl ke jq. Berfungsi bagus dan menyimpan beberapa langkah.sumber
*
- itu akan diganti dengan daftar file di direktori Anda saat ini.item2
nilai dengan spasi putih di dalamnya akan menjadi lebih dari satu elemen array.sebagai alternatif yang mudah, lihat
jtc
alat (di https://github.com/ldn-softdev/jtc ), untuk mencapai hal yang sama (seperti dalam contoh jq):penjelasan tentang
-w
opsi: kurung sudut<...>
menentukan pencarian seluruh json, akhiranl
menginstruksikan untuk mencari label daripada nilai,+0
menginstruksikan untuk menemukan semua kejadian (bukan hanya yang pertama).sumber
arr=( $(jq ...) )
jawaban, sejauh kontennya dipecah-string dan dikembangkan-glob untuk mengisi array - ruang yang berarti (bukan hanya baris baru) membuat elemen baru, dan elemen yang terlihat seperti ekspresi bola digantikan oleh file yang ekspresi cocok.