Cara MENEMPATKAN objek json dengan array menggunakan curl

95

Saya memiliki serangkaian data untuk dimasukkan ke dalam database. Antarmuka pengguna untuk memasukkan data tidak baik untuk entri massal, jadi saya mencoba merumuskan baris perintah yang setara. Saat saya memeriksa permintaan jaringan UI di chrome, saya melihat permintaan PUT dari objek json. Saat saya mencoba mereplikasi permintaan tersebut

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

Saya mendapatkan kesalahan

curl: (3) kurung kurawal bertingkat [globbing] tidak didukung pada pos X

Dimana X adalah posisi karakter pertama "[".

Bagaimana cara PUT objek json yang menyertakan array?

Miles Libbey
sumber

Jawaban:

148

Baris perintah Anda harus memiliki -d / - data yang disisipkan sebelum string yang ingin Anda kirim dalam PUT, dan Anda ingin mengatur Tipe-Konten dan bukan Terima.

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' http://example.com/service

Menggunakan data JSON yang tepat dari pertanyaan, baris perintah lengkap akan menjadi:

curl -H 'Content-Type: application/json' -X PUT \
-d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' \
http://example.com/service
Daniel Stenberg
sumber
4
-1 karena Content-Type (bukan Accept) adalah header yang harus diatur dalam kasus ini.
Goran
4
Bagi mereka yang bertanya-tanya, [JSON] hanyalah placeholder untuk string JSON. Jangan menambahkan tanda kurung siku ekstra di sekitar string JSON Anda.
Mihai Todor
90

Meskipun posting asli memiliki masalah lain (yaitu "-d" yang hilang), pesan kesalahannya lebih umum.

curl: (3) kurung kurawal bertingkat [globbing] tidak didukung pada pos X

Ini karena tanda kurung kurawal {} dan tanda kurung siku [] adalah karakter penggumpal khusus dalam ikal. Untuk mematikan globbing ini, gunakan opsi " -g ".

Sebagai contoh, kueri faset Solr berikut akan gagal tanpa "-g" untuk menonaktifkan curl globbing : curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

Yonik
sumber
3
Ini adalah solusi yang tepat untuk saya, menggunakan -gberfungsi seperti yang diharapkan. Terima kasih @Yonik
arjones
2
Ya ampun, saya telah mencari solusi untuk masalah GraphQL curl saya dan ini membantu saya. Saus enak.
NetOperator Wibby
39

Harus disebutkan bahwa Accepttajuk memberi tahu server sesuatu tentang apa yang kita terima kembali, sedangkan tajuk yang relevan dalam konteks ini adalahContent-Type

Seringkali disarankan untuk menentukan Content-Typeseperti application/jsonsaat mengirim JSON. Untuk curl sintaksnya adalah:

-H 'Content-Type: application/json'

Jadi perintah curl lengkapnya adalah:

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`
Monggol
sumber
2

Coba gunakan satu kutipan daripada tanda kutip ganda bersama dengan -g

Skenario berikut berhasil untuk saya

curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user [email protected]:123456 -X POST  https://yoururl.com

DENGAN

curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

Ini terutama menyelesaikan kesalahan perintah curl kesalahan saya: titik dua url buruk adalah karakter pertama

vibs2006
sumber