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

while循环移除引号转义致jq解析JSON失败的技术求助

问题与解决方法

问题场景

变量$response存储合法JSON数据(其中definition字段内的引号已正确转义,例如(with \\"the\\")),但执行以下脚本时,jq抛出JSON解析错误:

执行的脚本

echo "$response" | jq -c '.[].meanings[]' | while read meaning; do
  echo "$meaning"
  echo "$meaning" | jq -r '.'
  exit
done

错误结果

输出的JSON中转义引号丢失(变为(with "the")),导致jq报错:

{..."definition":"(with "the")"...}
jq: parse error: Invalid literal at line 1, column 64

问题原因

read命令默认会解析反斜杠转义字符,把JSON里的\\"转换成",破坏了JSON的语法结构,导致后续jq无法解析。

解决方案

方案1:直接用jq处理(推荐)

jq本身支持遍历操作,无需借助shell循环,直接用jq一次性处理所有meanings对象,既高效又不会破坏转义:

# 紧凑格式输出
echo "$response" | jq -c '.[].meanings[]'
# 格式化易读输出
echo "$response" | jq '.[].meanings[]'

方案2:修改read命令行为(保留循环场景)

如果必须使用shell循环,给read添加-r参数(禁止解析转义字符),确保JSON转义被完整保留:

echo "$response" | jq -c '.[].meanings[]' | while read -r meaning; do
  echo "$meaning" | jq -r '.'
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:54:56