【问题标题】:jq command gives invalid payload with curljq 命令使用 curl 提供无效的有效负载
【发布时间】:2021-11-28 15:04:13
【问题描述】:

我有一个 JSON 列表,我正在尝试使用 curl 从列表中发布一个特定的键:值到 slack webhook。我正在使用 jq 来获取特定键的值

这很好用:

echo {{job.message}} | jq -r '.[0] | .status'

这不起作用:

curl -vvv -X POST -H "Content-type: application/json" --data \"{\"text\":\"{{job.message}} | jq -r ''.[0] | .status''\"}\" https://hooks.slack.com/services/xxxxx

job.message是一个带有json列表的变量

当我在 shell 中使用 echo 输出结果时,它工作正常,但是当我使用 curl 时,它显示无效的有效负载或 .key 未找到,即使密钥存在。

【问题讨论】:

    标签: curl jq


    【解决方案1】:

    在您的text 值中,没有提到命令echo ...,您可以使用子shell 来评估结果。此外,您可以为--data 使用单引号而不是双引号以避免转义:

    curl -vvv -X POST \
        -H "Content-type: application/json" \
        --data '{"text":"'"$(echo $job_message | jq -r '.[0].status')"'"}' \
        "https://hooks.slack.com/services/xxxxx"
    

    您也可以使用jq -n 来构建 JSON 对象:

    curl -vvv -H "Content-type: application/json" \
        -d "$(jq -n --arg text $job_message '{"text": ($text | fromjson)[0].status}')" \
        "https://hooks.slack.com/services/xxxxx"
    

    您也可以像this 一样将jq 命令输出通过管道传输到主体,并仅使用jq 来构建json 对象:

    jq -n --arg text $job_message '{"text": ($text | fromjson)[0].status}' | \
       curl -vvv -H "Content-Type: application/json" -d @- "https://hooks.slack.com/services/xxxxx"
    

    【讨论】:

    • 谢谢。第二个选项对我有用
    猜你喜欢
    • 2016-08-10
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多