我想在CURL命令中将XML文件添加到我的JSON请求体。这就是我现在所拥有的
data=$(cat testdata.xml)
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "data": ''"$(echo $data)"''}' 'http://...'
然而,这会发送{ data: '$(echo $data)' } }
而不是实际提取文件。
如果我在$(echo $ data)周围取出外部单引号,如下所示:
data=$(cat testdata.xml)
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "data": '"$(echo $data)"'}' 'http://...'
然后我遇到错误意外令牌<在JSON的第10位
因为服务器正在阅读
'{ "data": <?xml version="1.0" encoding="UTF-8"?> - <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don\'t forget me this weekend!</body> </note>}',
我该如何解决这个问题?请注意,我不想先转换为JSON。我只想在body中发送字符串化的xml文件。
答案 0 :(得分:2)
与往常一样,使用jq
在bash中生成正确转义的JSON。
data=$(jq -Rs '{ "data": . }' <testdata.xml)
curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d "$data" \
"$url"
如果您没有安装jq
,则可以使用Python作为作业,将以下内容替换为使用jq
的行:
data=$(python -c 'import json, sys; json.dump({"data": sys.stdin.read()}, sys.stdout)' <testdata.xml)