使用jq处理curl返回的JSON变量时出现command not found错误
问题分析与解决
原命令的错误点
- 第一步的curl命令缺少闭合双引号,正确写法是:
RESPONSE_TEMPLATES=$(curl "https://maydomain.com/test") - 第三步的命令存在多处语法错误:
- 使用
$()包裹${RESPONSE_TEMPLATES} | ...会让shell把变量中的JSON内容当作命令执行,这是报错的核心原因 - jq的过滤语法错误,
{templateId,id}应该作为jq的参数,而非单独通过管道传递 - 引号不匹配,末尾多余了一个单引号
- 使用
正确的命令写法
你需要将变量中的JSON内容通过管道传给jq处理,而非让shell解析执行JSON内容。正确的第三步命令如下:
echo "${RESPONSE_TEMPLATES}" | jq -r '{templateId, id}'
补充说明
你的API返回的是JSON Lines格式(每行一个独立JSON对象),jq默认可直接处理这种格式。如果需要将结果合并为一个数组,可加上-s参数:
echo "${RESPONSE_TEMPLATES}" | jq -s '{templates: [.[] | {templateId, id}]}'
这样就能正确输出提取后的templateId和id字段,不会出现命令未找到的错误。
内容的提问来源于stack exchange,提问作者user2017319
相关产品推荐
相关产品推荐

