You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过jq使用shell变量作为key访问JSON值的问题排查

jq读取含特殊字符的键返回内容不完整问题排查

问题原因

  • 错误使用Shell数组存储多行输出:RESULT=($(jq ...))的写法会将jq的输出按空白字符(空格、换行、制表符等)拆分后存入数组,你输出的第一行内容{会作为数组的第一个元素,直接调用$RESULT默认只会返回数组第一个元素,因此仅输出{。
  • 误用-r参数:jq的-r(原始输出)参数仅用于输出JSON字符串类型值时去掉外层引号,你需要获取的是JSON对象,该参数属于多余配置。
  • 变量引用未加双引号:即使正确存储了多行内容,未用双引号包裹的$RESULT会被Shell将所有连续空白符替换为单个空格,丢失原有换行和格式。

修正后的脚本

#!/bin/bash

NUTS_PATH="NUTS|/nuts/2010" # 存储键名到Shell变量
INPUT_FILE="test.json"
# 去掉数组括号,命令替换外层加双引号保留换行,删除多余的-r参数
RESULT="$(jq --arg NUTS_PATH_ALIAS "$NUTS_PATH" '.[$NUTS_PATH_ALIAS]' "$INPUT_FILE")"

echo "Result: $RESULT"
echo "$RESULT" > item.json

运行修正后的脚本即可得到完整的JSON对象输出,item.json中也会存储带原有格式的对应键内容。

内容的提问来源于stack exchange,提问作者user8479984

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:36:03