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

使用jq插入HTML模板时遇语法错误:原始输入不被接受

问题分析

你遇到的语法错误确实源于Shell层面的引号与特殊字符转义问题。HTML模板中的双引号、单引号、反斜杠等字符,会在Shell将参数传递给jq之前被解析变形,导致jq接收到的内容不符合JSON语法规范,哪怕使用--raw-input也无法解决Shell提前解析的问题。

修正方案

以下是几种可靠的解决方法,按推荐程度排序:

方法1:使用jq的--arg选项传递变量(推荐)

让jq直接读取Shell变量,完全规避Shell转义干扰,是最稳妥的方式:

# 假设你的格式化后HTML内容存储在变量html_content中
html_content="<div class='test'>Hello \"World\"</div>"

# 通过--arg将变量传入jq,更新指定JSON字段
jq --arg html "$html_content" '.Body.Html.Data = $html' input.json > output.json

--arg会自动处理变量内的引号、特殊字符,无需手动转义,jq内部会正确识别并插入到JSON字段中。

方法2:通过Here-Doc传递原始HTML内容

如果HTML内容较长或包含大量特殊字符,可使用Here-Doc让jq直接读取原始内容,避免Shell解析:

# 从HTML文件读取内容传入jq
jq '.Body.Html.Data = input' input.json <<EOF
$(cat your_formatted_html.html)
EOF

# 也可直接将HTML内容写在EOF之间
jq '.Body.Html.Data = input' input.json <<EOF
<div class="container">
  <p>包含"双引号"、'单引号'和换行的内容</p>
</div>
EOF

Here-Doc会完整保留HTML的原始格式,input函数会读取标准输入的原始内容并赋值给指定字段。

方法3:手动转义HTML中的特殊字符(不推荐)

若必须直接传递字符串,需手动转义HTML中的双引号、反斜杠等特殊字符:

# 转义反斜杠为\\,双引号为\"
escaped_html=$(echo "$html_content" | sed 's/\\/\\\\/g; s/"/\\"/g')

# 将转义后的内容传入jq
jq ".Body.Html.Data = \"$escaped_html\"" input.json > output.json

这种方式容易遗漏特殊字符(如单引号、换行符),仅适合简单HTML场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:02:50