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

如何通过jq转义XML字符串并将其作为值合并到JSON中?

解决jq将转义后的XML合并到JSON的问题

我来帮你搞定这个jq命令的问题!你想要的是把XML文件内容转义成XML实体后,作为新字段合并到现有JSON里,之前的命令出错主要是因为选项搭配错误和变量引用方式不对,下面给你正确的方案:

正确命令(XML内容在文件中)

假设你的JSON字符串存在变量$JSON_STRING,XML文件路径是$XML_FILENAME,用这条命令就能得到你想要的结果:

echo "$JSON_STRING" | jq --rawfile xml_content "$XML_FILENAME" '.xml = ($xml_content | @html)'

命令解释

  • --rawfile xml_content "$XML_FILENAME":把指定XML文件的完整内容(包括换行、特殊字符)以原始字符串的形式读取到jq变量$xml_content中,避免了处理数组的麻烦(之前用--slurpfile会把文件内容存为数组,需要取[0]才能拿到完整内容,--rawfile更适合文本文件场景)。
  • .xml = ($xml_content | @html):在原JSON对象中新增xml字段,通过@html过滤器自动转义XML特殊字符——比如<转成&lt;,"转成&quot;,完全符合你的需求。

如果XML内容在变量中(而非文件)

如果你的XML内容已经存在变量$XML_FILE_CONTENT里,可以用--arg选项直接传入变量内容,不需要读文件:

echo "$JSON_STRING" | jq --arg xml_content "$XML_FILE_CONTENT" '.xml = ($xml_content | @html)'

之前命令的错误点解析

你之前的命令主要有这些问题:

  1. 错误使用--raw-input:这个选项会让jq把标准输入的JSON字符串当成纯文本处理,而不是解析为JSON对象,自然无法执行添加字段的操作。
  2. 变量引用方式错误:第一个命令里的"($XML_CONTENT)"是把括号和变量名当成了字符串字面量,没有实际引用到读取的XML内容,所以会得到错误的字符串值。
  3. 选项搭配冲突:第三个命令的--raw-input和JSON解析需求冲突,去掉这个选项才能正确处理原JSON结构。

验证结果

用你的示例内容测试:

  • XML文件内容:<blah abc="def">123</blah>
  • 原始JSON:{ "thj": "abc" }

执行命令后会输出:

{
  "thj": "abc",
  "xml": "&lt;blah abc=&quot;def&quot;&gt;123&lt;/blah&gt;"
}

完全符合你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:59:48