我想这完全取决于您要发布到的服务器。
如果它以 urlencoded 形式接受您的美化 JSON,那么 --data-urlencode @input.json 就足够了 curl。如果没有,您必须先对其进行缩小/序列化,然后像 xidel 这样的 JSON 解析器可以提供帮助:
$ xidel -s input.json -e 'serialize($json,{"method":"json"})'
{"someList":[{"accountNumber":123456,"balance":3.14},{"accountNumber":7890,"balance":2.72}],"numErrors":0,"duration":12345}
$ xidel -s input.json -e 'serialize($json,{"method":"json"})' | \
curl -s --data-urlencode @- "<url>"
$ xidel -s input.json -e 'uri-encode(serialize($json,{"method":"json"}))'
%7B%22someList%22%3A%5B%7B%22accountNumber%22%3A123456%2C%22balance%22%3A3.14%7D%2C%7B%22accountNumber%22%3A7890%2C%22balance%22%3A2.72%7D%5D%2C%22numErrors%22%3A0%2C%22duration%22%3A12345%7D
$ xidel -s input.json -e 'uri-encode(serialize($json,{"method":"json"}))' | \
curl -s -d @- "<url>"
xidel也可以做POST请求:
$ xidel -s \
-d '{uri-encode(serialize(json-doc("input.json"),{"method":"json"}))}' \
"<url>" \
-e '$raw'
$ xidel -s input.json -e '
x:request({
"post":uri-encode(serialize($json,{"method":"json"})),
"url":"<url>"
})/raw
'
-
-e '$raw' 显示原始输出,类似于 curl。
-
xidel -s input.json -d '...$json...' 不起作用,因为 -d 在读取输入之前被评估,因此 json-doc() 在查询中打开文件/url。