Saya punya array JSON seperti ini:
{
"SITE_DATA": {
"URL": "example.com",
"AUTHOR": "John Doe",
"CREATED": "10/22/2017"
}
}
Saya mencari untuk mengulangi array ini menggunakan jq sehingga saya dapat mengatur kunci setiap item sebagai nama variabel dan nilai sebagai nilainya.
Contoh:
- URL = "example.com"
- PENULIS = "John Doe"
- DICIPTAKAN = "10/22/2017"
Apa yang saya dapatkan sejauh ini mengulangi array tetapi membuat string:
constants=$(cat ${1} | jq '.SITE_DATA' | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]")
Output yang mana:
URL=example.com
AUTHOR=John Doe
CREATED=10/22/2017
Saya ingin menggunakan variabel-variabel ini lebih jauh ke bawah dalam skrip:
echo ${URL}
Tapi ini menggemakan output kosong saat ini. Kurasa aku butuh eval
sesuatu atau sesuatu di sana, tetapi sepertinya tidak bisa meletakkan jari di atasnya.
declare -- “$key=$value”
dan memiliki$AUTHOR
pekerjaan dll seperti pada aslinya, tanpa array. Ini masih lebih aman daripada eval, meskipun perubahanPATH
atau sesuatu masih mungkin jadi kurang dari versi ini.declare --
versi Anda aman dengan membandingkan $ key dengan daftar nama variabel yang diizinkan.Baru menyadari bahwa saya dapat mengulangi hasil dan mengevaluasi setiap iterasi:
Mengizinkan saya melakukan:
sumber
Saya sangat suka saran @Michel. Terkadang, Anda mungkin benar-benar mengekstrak beberapa nilai variabel untuk menjalankan tugas di server tertentu menggunakan BASH. Jadi, variabel yang diinginkan adalah tahu. Ini menggunakan pendekatan ini adalah cara untuk menghindari atau beberapa panggilan ke jq untuk menetapkan nilai per variabel atau bahkan untuk menggunakan pernyataan baca dengan beberapa variabel di mana beberapa dapat valid dan kosong, yang mengarah ke pergeseran nilai (yang merupakan masalah saya)
Pendekatan saya sebelumnya yang mengarah akan menyebabkan kesalahan nilai pergeseran jika .svID [] .ID = "" ( sv akan mendapatkan slotID nilai
Jika Anda mengunduh objek menggunakan curl, berikut adalah pendekatan saya untuk mengubah nama beberapa variabel menjadi nama yang ramah sebagai mengekstrak data dari array data
menggunakan eval dan filter akan menyelesaikan masalah dengan satu baris dan akan menghasilkan variabel dengan nama yang diinginkan
Keuntungan dalam hal ini, adalah kenyataan bahwa ia akan memfilter, mengganti nama, memformat semua variabel yang diinginkan pada langkah pertama. Perhatikan bahwa ada. [0] | yang sangat umum untuk memiliki jika sumber jika dari server API RESTFULL menggunakan GET, respons data sebagai:
Jika data Anda bukan dari array, mis. adalah objek seperti:
hapus saja indeks awal:
Ini adalah pertanyaan lama, tetapi saya merasa berbagi, karena sulit ditemukan
sumber