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


94

データベースに入力する一連のデータがあります。データを入力するためのユーザーインターフェイスは一括入力には適していないため、同等のコマンドラインを作成しようとしています。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)[globbing]入れ子の括弧はpos Xではサポートされていません

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

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

回答:


147

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

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

4
この場合、設定する必要があるヘッダーは(Acceptではなく)Content-Typeであるため、-1です。
ゴラン

3
[JSON]は、JSON文字列の単なるプレースホルダーです。JSON文字列の前後に角かっこを追加しないでください。
Mihai Todor

89

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

curl:(3)[globbing]入れ子の括弧はpos Xではサポートされていません

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

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


3
これは私にとって正しい解決策であり、-g期待通りに機能しました。ありがとう@Yonik
arjones

2
私の良さ、私はGraphQLのカール問題の解決策を探していましたが、これが役に立ちました。素晴らしい醤油。
NetOperator Wibby 2018年

39

ことに言及しなければならないAccept。この文脈では、関連するヘッダがあるのに対し、ヘッダは、我々は戻って受け入れているかについて、サーバーの何かを伝えますContent-Type

これは、指定することが多いことをお勧めだContent-Typeapplication/jsonJSONを送信するとき。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`

2

-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 test@testmail.com: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 test@testmail.com:123456 -X POST  https://yoururl.com

これは特に私のエラーcurlコマンドエラーを解決しました:不正なURLコロンが最初の文字です


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.