如何在curlpost命令中将JSON文件作为请求体的一部分发送

如何在curlpost命令中将JSON文件作为请求体的一部分发送,json,shell,curl,command-line,Json,Shell,Curl,Command Line,我使用CURL命令行将HTTPPOST发送到web服务。我希望将文件内容作为POST命令体的一部分包含在内。这可能吗?我知道我可以发送一个文件作为整个身体的答复。但我只希望身体的一部分成为文件的内容 比如说 curl -d '{ "name": "rahul", "speed": "fast", "data": { "number": 1, "letter": "abd", "letter2": "efg"} }' 'http://...' 这里我只想要数据作为文件的内容。不是整个身体。如何执

我使用CURL命令行将HTTPPOST发送到web服务。我希望将文件内容作为POST命令体的一部分包含在内。这可能吗?我知道我可以发送一个文件作为整个身体的答复。但我只希望身体的一部分成为文件的内容

比如说

curl -d '{ "name": "rahul", "speed": "fast", "data": { "number": 1, "letter": "abd", "letter2": "efg"} }' 'http://...'

这里我只想要
数据
作为文件的内容。不是整个身体。如何执行此操作?

设置一个变量以包含文件内容:

data=$(cat /path/to/file)
然后将其替换为JSON:

curl -d '{ "name": "rahul", "speed": "fast", "data": "'$data'" }' 'http://...'

您接受了@Barmar的回答,但对于阅读本文的任何人,@Barmar切换了双引号和单引号,这将导致命令无法按预期工作

以下工作:

data=$(cat filename) && \
curl -d '{ "name": "rahul", "speed": "fast", "data": "'$data'" }' 'http://...'

请注意,
$data
变量首先用单引号括起来,然后用双引号括起来。

它可以是到达文件的任何有效路径。用双引号括起来或用双引号括起来有关系吗?我想只要另一个解决方案起作用,它就不起作用。好吧,如果你的顺序错误,命令就不会起作用。我认为答案被接受是因为作者在《意外》中切换了引用(因此,它起了作用),或者作者找到了答案,没有提及它。我编辑了我的答案,以澄清@Barmar的答案是wrong@WolfSovereign你能编辑巴尔马的答案使其正确吗?威尔,不知道我能做到,我的错。