从stdin bash替换Curl请求中的JSON正文

时间:2018-08-23 22:38:39

标签: bash curl

我正在尝试使用stdin的输入在curl请求的主体中填充一个变量。

echo 123 | curl -d "{\"query\": {\"match\": {\"number\": @- }}}" -XPOST url.com

很遗憾,@-没有被替换。我希望请求的内容与下面的

匹配
{
"query": {
    "match": {
      "number": 123
    }
  }
}

如何替换标准输入中的query.match.number值?

1 个答案:

答案 0 :(得分:2)

curl不仅从stdin中读取文档的一个子集,就像您在这里尝试的那样-它从stdin中读取整个内容,或者从中读取它标准输入(如果达到了您的期望,就不可能在不传递转义/转义行为的情况下,将文字字符串@-放在传递给curl -d的文档的文本中,从而使行为进一步复杂化)。

要生成使用stdin中的值的JSON文档,请使用jq

echo 123 |
  jq -c '{"query": { "match": { "number": . } } }' |
  curl -d @- -XPOST url.com

也就是说,这里根本没有令人信服的理由使用stdin。请考虑:

jq -nc --arg number '123' \
    '{"query": { "match": { "number": ($number | tonumber) } } }' |
  curl -d @- -XPOST url.com