curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'
Perintah di atas hanya menghasilkan nilai-nilai seperti di bawah ini:
"[email protected]"
"2323"
"test"
"02-03-2014-13:41"
"application"
Bagaimana saya bisa mendapatkan nama kunci sebagai berikut:
email
versionID
context
date
versionName
jq
?Jawaban:
Kamu bisa memakai:
UPDATE: Untuk membuat array BASH menggunakan tombol-tombol ini:
Menggunakan BASH 4+:
Pada BASH yang lebih tua, Anda dapat melakukan:
Kemudian cetak:
sumber
mapfile -t arr < <(jq -r 'keys[]' ms.json)
alih-alih penggantian proses yang jelek untuk menghindari masalah dengan spasi di tombol.arr=(); while IFS='' read -r line; do arr+=("$line"); done < <(...)
juga bagus.keys_unsorted
untuk mendapatkan kunci dalam urutan dokumen.Anda harus menggunakan
jq 'keys[]'
. Sebagai contoh:Akan menampilkan daftar yang dipisahkan garis:
sumber
Dalam kombinasi dengan jawaban di atas, Anda ingin meminta jq untuk output mentah, jadi filter terakhir Anda harus mis .:
Dari jq help:
sumber
bash
skrip gotcha yang rumit - jika Anda tidak menentukan-r
maka Anda akan mendapatkan string yang dikutip, yang terlihat bagus di layar, tetapi Anda biasanya tidak ingin tanda kutip yang tertanam dalam string.Untuk mencetak kunci pada satu baris sebagai csv:
Keluaran:
Untuk kelengkapan csv ... untuk mencetak nilai pada satu baris sebagai csv:
Keluaran:
sumber
echo '{"ab": 1, "cd": 2}' | jq -r 'keys[]'
mencetak semua kunci satu tombol per baris tanpa tanda kutip.sumber
Untuk mendapatkan kunci pada simpul yang lebih dalam di JSON:
sumber
Berikut cara lain untuk mendapatkan array Bash dengan contoh JSON yang diberikan oleh @anubhava dalam jawabannya:
sumber