2013-03-15 19 views
64

データベースに入力する一連のデータがあります。データを入力するユーザーインターフェイスは一括入力には適していないので、同等のコマンドラインを策定しようとしています。クロムでUIのネットワーク要求を調べると、jsonオブジェクトのPUT要求が表示されます。 POS Xjsonオブジェクトをカールを使用して配列に挿入する方法

Xが文字である

でサポートされていない(3)[グロブ]ネストされた括弧:私は要求

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` 

を複製しようとすると、私はエラー

カールを取得します最初の "["の位置。

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

答えて

97

コマンドラインには、PUTで​​送信する文字列の前に、-d/--dataが挿入されていなければなりません。また、Content-Typeを設定し、同意しないようにします。質問から正確なJSONデータを使用して

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

、完全なコマンドラインはなる:

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 
+3

-1に基づいています。 – Goran

+0

不思議に思う人のために、[JSON]は単にJSON文字列のプレースホルダです。 JSON文字列の周囲に角括弧を追加しないでください。 –

+1

例では実際のJSONを使用しています – bluefloyd8

33

一方で、Acceptヘッダは、我々は戻って受け入れているかについて、サーバーの何かを伝えることに言及しなければなりませんこのコンテキストの関連ヘッダーはContent-Type

Content-Typeapplication/jsonと指定することをお勧めします。カールの構文は次のとおりです。

-H 'Content-Type: application/json' 

だから、完全なカールコマンドは次のようになります。

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` 
50

オリジナルのポストは、他の問題(すなわち行方不明「-d」)を持っていたが、エラーメッセージが多いですジェネリック。

カール:POSでサポートされていない(3)グロブ]ネストブレースX

中括弧{}、角括弧[]はカールに特殊グロブ文字であるためです。 このグロブをオフにするには、 "-g"オプションを使用します。例として、以下Solrのファセットクエリがをグロブカールをオフにする「-g」せずに失敗します

curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

+0

これは、私にとって正しい解決策でした。期待通りに働いた '-g'を使いました。ありがとう@Yonik – arjones

+0

私のおかげで、私は私のGraphQLのカール問題の解決策を探していた、これは私を助けた。素晴らしい醤油。 –

関連する問題