繁体   English   中英

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

[英]Replace JSON body in Curl request from stdin bash

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

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

不幸的是, @-没有被替换。 我希望请求的内容与以下内容匹配

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

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

就像您在这里尝试的那样,curl不会仅从stdin中读取文档的子集-它要么从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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM