Mohon maaf jika saya telah melewatkan sesuatu yang sangat jelas; Saya baru saja menemukan jq
dan mencoba menggunakannya untuk memperbarui satu nilai JSON tanpa memengaruhi data di sekitarnya.
Saya ingin menyalurkan curl
hasil ke jq
, memperbarui nilai, dan menyalurkan JSON yang diperbarui ke curl -X PUT
. Sesuatu seperti
curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json
Sejauh ini saya telah meretasnya bersama-sama menggunakan sed
, tetapi setelah melihat beberapa contoh |=
operator di jq
saya yakin saya tidak memerlukan ini.
Berikut adalah contoh JSON - bagaimana saya akan menggunakan jq
untuk menyetel "local": false
, sambil mempertahankan JSON lainnya?
{
"shipping": {
"local": true,
"us": true,
"us_rate": {
"amount": "0.00",
"currency": "USD",
"symbol": "$"
}
}
}
"
, seperti.shipping.local = "new place"
. Jadi seluruh perintah akan menjadicurl http://example.com/shipping.json | jq '.shipping.local = "new place"'
. Jika tidak, Anda akan mendapatkan kesalahan aneh.false
. Nilai tidak harus berupa string.false
. Apa yang salah?Perbarui nilai (set .foo.bar ke "nilai baru"):
Perbarui nilai menggunakan variabel (set .foo.bar menjadi "hello"):
sumber
fungsi yang mirip dengan operator | = adalah peta. peta akan cocok untuk menghindari persyaratan filter sebelumnya untuk array ...
bayangkan data Anda adalah array (sangat umum untuk contoh ini)
oleh karena itu perlu untuk mempertimbangkan array dalam kode sebagai:
atau menggunakan fungsi peta yang dibuat untuk bekerja di setiap elemen array sebagai
Pengamatan
Demi mereka yang sedang belajar, Anda juga melakukan beberapa kesalahan dalam penggunaan jq, anggap saja itu "membaca" parameter pertama sebagai program, maka semua perintah yang diinginkan harus dimasukkan dalam string pertama setelah memanggil program.
sumber