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

使用jq对比JSON对象失败:Shell脚本执行异常排查

问题原因与修复方案

核心问题:变量中的JSON格式不合法且与文件结构不匹配

你的脚本执行失败的根本原因是RESPONSE变量里的内容不是标准JSON,和expectedTestResponse1.json里的合法JSON存在多处结构/语法差异:

  • 对象键未加双引号:JSON语法强制要求所有对象的键必须用双引号包裹,比如remoteIds、remoteId、requestsReceived在你的变量里都没有引号,而文件中这些键都是带双引号的。jq作为严格的JSON解析工具,会直接拒绝这种不合法的输入。
  • remoteId的值类型不匹配:变量里的remoteId:[fd00:...--(...)]是把值声明为数组,但文件里的remoteId是字符串类型(被双引号包裹的"[fd00:...--(...)]"),两种类型完全无法匹配。
  • 额外语法错误:变量里的数组元素分隔、结构嵌套也存在格式问题,进一步导致jq解析失败。

修复后的脚本

将RESPONSE变量修改为合法的JSON格式,确保键名带双引号、值类型与文件一致:

RESPONSE='{
  "remoteIds": [
    {"remoteId": "[fd00:10:244:3:0:0:0:14]--(http://fd00-10-244-3--14.scctest.pod:8080)", "requestsReceived": 1},
    {"remoteId": "[fd00:10:244:3:0:0:0:14]--(http://fd00-10-244-3--14.scctest.pod:8081)", "requestsReceived": 1},
    {"remoteId": "[fd00:10:244:3:0:0:0:14]--(http://fd00-10-244-3--14.scctest.pod:8082)", "requestsReceived": 1},
    {"remoteId": "[fd00:10:244:3:0:0:0:14]--(http://fd00-10-244-3--14.scctest.pod:8083)", "requestsReceived": 1}
  ]
}'
expected_response='/test/scripts/tests/local-policy/expectedTestResponse1.json'

# 对比JSON对象
if jq --argjson var "$RESPONSE" -e '. == $var' "$expected_response" > /dev/null 2>&1; then
  echo 0  # JSON内容一致
else
  echo 1  # JSON内容不一致
  exit 1
fi

验证方法

修改后可以先单独检查RESPONSE的JSON合法性:

echo "$RESPONSE" | jq .

如果能正常输出格式化后的JSON,说明格式没问题,此时再执行脚本就能得到预期的0输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:57:14