curl:JSON 中的意外令牌

Mas*_*son 1 bash json curl

当我尝试提交此内容时,服务器将消息发回给我

"Unexpected token t in JSON at position 1".

无论第一个非 { 非 " 字符是什么,它都会这样做。如果我输入 {"": ""} 它会说

"Unexpected token : in JSON at position 1".
Run Code Online (Sandbox Code Playgroud)

这是我的代码。

  curl -H "Content-Type: application/json" -d {"test": "test"} url
Run Code Online (Sandbox Code Playgroud)

我已经尝试了在它周围加上引号并转义引号的其他变体,但无济于事,但如果您认为这是问题,请随时提出一种格式。

cod*_*ter 6

您需要保护双引号和空格。您可以使用单引号这样做,因此:

curl -H "Content-Type: application/json" -d '{"test": "test"}' url
Run Code Online (Sandbox Code Playgroud)

如果没有单引号,shell 会将双引号视为语法的一部分并剥离它们,因此curl只会看到

{test:
Run Code Online (Sandbox Code Playgroud)

作为-d选项的参数,和

test}
Run Code Online (Sandbox Code Playgroud)

作为单独的参数发送。使用双引号,curl会将其视为以下参数-d

{"test": "test"}
Run Code Online (Sandbox Code Playgroud)

您也可以使用反斜杠来实现这​​一点,这有点麻烦:

curl -H "Content-Type: application/json" -d {\"test\":\ \"test\"} url
Run Code Online (Sandbox Code Playgroud)

请参阅这些相关帖子/文档: