サーバーにJSONデータを送信して応答を読み取ることで、サーバーをテストしようとしています。
POST
{"item":"value with spaces"}
ですが、curl
を使用すると、バックスラッシュと二重引用符が送信されることがわかります。
curl -d "{\"item\":\"value with spaces\"}" http://myserver.com/somerubyapp?get=stuff
サーバーは実際に"{\"item\":\"value with spaces\"}"
文字列の両端の二重引用符、バックスラッシュ、その他すべてを含みます。
curl
を間違って使用していますか、それともシェルの問題ですか、bashですか?
それは一種のネクロポスティングですが、私は最近同じ問題を抱えており(バックエンドが異なります)、その理由は間違ったContent-Typeにあることがわかりました。デフォルトでは「text/plain」または「text/html」で、私の場合はcurl -H "Content-Type: application/json" -d ...
問題を解決しました。
サーバー側を使用してパラメーターを印刷していますか?それはその方法からのアーチファクトかもしれません。
引用の両方の方法、すなわち。 "{\"...
および'{"...
大丈夫です。
編集:私がほのめかしている効果の例を挙げましょう:
% irb -r json
>> h = {"item" => "value with spaces"} # (1)
=> {"item"=>"value with spaces"} # (2)
>> h.to_json
=> "{\"item\":\"value with spaces\"}" # (3)
>> puts(h.to_json)
{"item":"value with spaces"} # (4)
=> nil
(1)関連付けられた値を持つ単一のキーで構成されるハッシュテーブルを定義します。 irbは(2)の結果を表示します。これもハッシュテーブルです。 h
のJSON表現を見ると、irbは(3)の内側の引用符をエスケープしていますが、(4)はバックスラッシュがそこに「本当に」ないことを示しています。
したがって、howパラメータをサーバーに出力する方法によっては、表示された表現になる可能性があります。