跳到主内容
UniKit

JSON 转 XML

把 JSON 转换成 XML:可配置根节点名、数组包裹方式、属性前缀(@)与文本节点(#text),支持缩进、XML 声明与 CDATA,并自动转义特殊字符。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

JSON

转换选项

根节点是数组时始终用「数组元素名」包裹,保证只有一个根元素。

数组写法
XML 结果

这个工具能做什么

  • 给只认 XML 的老系统(SOAP 接口、银行/政务对接、配置文件)喂数据时,把 JSON 转成结构化的 XML 请求体。
  • JSON 里用 @id 这种键表示 XML 属性、用 #text 表示节点文本,转换时会还原成 id="7" 的属性和节点内容。
  • 根节点是数组时自动用数组元素名包裹一层,保证输出永远只有一个根元素,否则 XML 解析器会直接报错。
  • 文本里的 <、>、& 自动转义,含特殊字符的内容可以选 CDATA 包裹,避免手工处理转义。

示例

输入

{"name":"Tom","tags":["a","b"]}

输出

<root>
  <name>Tom</name>
  <tags>
    <item>a</item>
    <item>b</item>
  </tags>
</root>

默认根节点名 root、数组元素名 item、缩进 2 空格;数组用 <item> 包裹,也可以在选项里改成重复父元素名。

常见问题

JSON 里的 @ 和 #text 是什么约定?

这是 JSON↔XML 转换的常见约定:键以 @ 开头表示 XML 属性(@id 变成 id="7"),键等于 #text 表示节点的文本内容。前缀和文本键名都可以在选项里改,清空属性前缀就会把所有键都当子元素处理。

数组用 <item> 包裹和重复父元素名有什么区别?

「用 <item> 包裹」生成 <tags><item>a</item></tags>,结构清晰但多一层;「重复父元素名」生成 <tag>a</tag><tag>b</tag>,更贴近某些 XML 方言的习惯。根节点处的数组无论选哪种都会用数组元素名包裹,保证只有一个根元素。

为什么输出的文本被转义了?

XML 里 <、>、& 是保留字符,出现在文本中必须写成 &lt;、&gt;、&amp;,否则文档非法。如果内容本身包含大量标记、不想转义,就勾选 CDATA,输出会包成 <![CDATA[...]]>。

JSON 的键含空格或中文能当元素名吗?

不能。XML 元素名只允许字母、数字、下划线、点、连字符,非法字符会被替换成 -;以数字、点或连字符开头时会补上元素名前缀。生成的元素名一定合法,但可能与原键名不完全一致,反解时需要注意。

我的 JSON 会被上传吗?

不会。转换全部在浏览器本地完成,不发网络请求,断网可用。

关键词:json to xmljson xml 转换xml转换converterattribute#textcdata数据格式

同类工具