web-dev-qa-db-ja.com

curlを使用してjsonオブジェクトを配列でPUTする方法

データベースに入力する一連のデータがあります。データを入力するためのユーザーインターフェイスは、一括入力には適していません。そのため、同等のコマンドラインを作成しようとしています。 ChromeでUIのネットワークリクエストを調べると、jsonオブジェクトのPUTリクエストが表示されます。リクエストを複製しようとすると

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`

エラーが出る

curl:(3)[globing] pos Xでネストされたブレースはサポートされていません

Xは最初の「[」の文字位置です。

配列を含むjsonオブジェクトをPUTするにはどうすればよいですか?

83
Miles Libbey

コマンドラインには、PUTで​​送信する文字列の前に -d /-data を挿入し、AcceptではなくContent-Typeを設定する必要があります。

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

質問の正確なJSONデータを使用すると、完全なコマンドラインは次のようになります。

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
130
Daniel Stenberg

元の投稿には他の問題(「-d」がないなど)がありましたが、エラーメッセージはより一般的です。

curl:(3)[globing] pos Xでネストされたブレースはサポートされていません

これは、中括弧{}と角括弧[]がcurlの特別なグロビング文字であるためです。このグロビングをオフにするには、「-g」オプションを使用します。

例として、次のSolrファセットクエリは、"-g"を使用せずに失敗し、カールグロビングをオフにしますcurl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

73
Yonik

Acceptヘッダーは、サーバーに戻って受け入れているものについて何かを伝えるのに対して、このコンテキストの関連ヘッダーはContent-Typeであることに注意してください

JSONを送信するときに、Content-Typeapplication/jsonとして指定することをお勧めします。 curlの構文は次のとおりです。

-H 'Content-Type: application/json'

したがって、完全なcurlコマンドは次のようになります。

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`
37
mogul

助けられた唯一のことは、JSON本文テキストの代わりにJSONのファイルを使用することです。 cURLを使用してファイルの内容をボディエンティティとして送信する方法 に基づく

0
Chen

-gとともに二重引用符の代わりに単一引用符を使用してみてください

次のシナリオは私のために働いた

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

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

これは特にresolved my error curl command error:bad url colon最初の文字です

0
vibs2006