Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cURL:将stdin作为数据发送时JSON无效_Json_Bash_Curl - Fatal编程技术网

cURL:将stdin作为数据发送时JSON无效

cURL:将stdin作为数据发送时JSON无效,json,bash,curl,Json,Bash,Curl,我可以通过cURL通过以下命令控制飞利浦色调灯: curl -X PUT --data '{"on":true}' "http://<bridgeip>/api/<key>/lights/7/state"; curl-xput--data'{“on”:true}'http:///api//lights/7/state"; 我正在用一个函数生成有效负载,所以我想将其管道化为cURL(从stdin获取其输入): onString='{“on”:true}'; echo“$

我可以通过cURL通过以下命令控制飞利浦色调灯:

curl -X PUT --data '{"on":true}' "http://<bridgeip>/api/<key>/lights/7/state";
curl-xput--data'{“on”:true}'http:///api//lights/7/state";
我正在用一个函数生成有效负载,所以我想将其管道化为cURL(从stdin获取其输入):

onString='{“on”:true}';
echo“$onString”| curl-X PUT--data--http:///api//lights/7/state";
但这会抛出一个错误:“body包含无效的json”

我不明白的是这是有效的:

onString='{"on":true}';
curl -X PUT --data "$onString" "http://<bridgeip>/api/<key>/lights/7/state";
onString='{“on”:true}';
curl-X PUT--data“$onString”http:///api//lights/7/state";
谁能解释一下吗

(顺便说一句,当我将函数的输出通过管道传输到
cat
时,生成的字符串与预期的一样,当复制并粘贴到jsonlint时,会作为有效的JSON签出。)

--data-
不会从stdin获取数据,它只发送一个文本
-

要实际从stdin获取数据,请使用
--data@-


(想想看,
--data binary@-
可能是一个更好的主意,我认为在windows上运行时,它与换行符会有所不同,但我不是100%确定)

。非常感谢。令人困惑的是,cURL的人说:“如果你以@字母开始数据,其余的应该是读取数据的文件名,或者——如果你想cURL从stdin读取数据。”我想删除我的问题——尽管你很有帮助——但有些人已经决定开始向下投票,所以我想我不得不处理它@洛坎知道你为什么会落选吗?唯一让我感到矛盾的是“这个问题应该出现在stackoverflow.com上还是超级用户网站上?”,但这并不意味着要投反对票,充其量也意味着要进行关闭/转移投票,我看不出任何原因,但我问了这个问题!我不确定是否能区分堆栈溢出和超级用户,所以也许你是对的。
onString='{"on":true}';
curl -X PUT --data "$onString" "http://<bridgeip>/api/<key>/lights/7/state";