通过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
相关产品推荐
相关产品推荐

