JSON 转 XML 转换工具
将 JSON 数据一键转换为 XML 文档,支持根节点名、数组项名、属性风格、CDATA 包裹、XML 声明、缩进等配置,自动转义特殊字符,well-formed 校验。适用于 SOAP 服务对接、SVG 生成、Office 文档、Android 资源、旧系统配置等场景,所有数据在浏览器本地处理。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name>开发者工具箱</name>
<version>1.0.0</version>
<active>true</active>
<score>95</score>
<tags>
<item>前端</item>
<item>工具</item>
<item>零依赖</item>
</tags>
<author>
<name>Aether</name>
<email>aether@example.com</email>
</author>
<features>
<item>
<name>JSON 格式化</name>
<enabled>true</enabled>
</item>
<item>
<name>Base64 编码</name>
<enabled>true</enabled>
</item>
</features>
<description>支持 <特殊> 字符 & 转义</description>
<note/>
</root>常见问题
1. JSON 转 XML 有哪些常见应用场景?
尽管 JSON 已成为现代 Web API 的事实标准,XML 在以下场景仍是必需格式:
- SOAP Web Service:传统企业级服务(如银行、保险、SAP)的请求与响应均为 XML
- SVG 图形:可缩放矢量图形本质是 XML,从 JSON 生成 SVG 是常见需求
- Office 文档:docx / xlsx / pptx 内部均为 XML(Office Open XML 标准)
- Android 资源:布局文件 strings.xml / styles.xml / layout 均为 XML
- 配置文件:Java Spring、.NET WebService、Maven pom.xml 等旧系统配置
- Atom / RSS Feed:订阅源仍以 XML 为主
- 导出与归档:PDF 表单、税务申报、电子发票等结构化文档
2. JSON 数组如何转换为 XML?
JSON 数组会展开为多个同名元素。数组项的标签名由「数组项名」选项控制(默认 item)。例如:
{"tags": ["前端", "工具"]} 转换为:
<tags>
<item>前端</item>
<item>工具</item>
</tags> 可在选项中把「数组项名」改为更具语义的名称(如 tag、li、entry)。
3. JSON 的 key 含非法字符(空格、数字开头)怎么办?
XML 标签名有严格规则:必须以字母或下划线开头,只能包含字母、数字、连字符、下划线、点号,且不能以 xml(任意大小写)开头。本工具会自动修正非法标签名:
- 数字开头 → 加下划线前缀(如
123→_123) - 含空格或特殊字符 → 替换为下划线(如
"a b"→a_b) - 以 xml 开头 → 加下划线前缀
- 完全无法修正 → 退化使用数组项名作为标签
修正会在警告区提示具体变更,便于核对。
4. 「扁平对象用属性」选项有什么作用?
默认情况下,对象的字段都转为子元素:
<user>
<name>Aether</name>
<age>18</age>
</user> 开启「扁平对象用属性」后,若对象的所有字段都是基本类型(字符串 / 数字 / 布尔 / null),会转为属性形式,更紧凑:
<user name="Aether" age="18"/> 属性模式适合扁平的元数据对象。嵌套对象仍保持子元素结构,不会被强制转为属性。
5. CDATA 与字符转义有什么区别?
XML 文本节点中出现 <、>、& 必须处理,否则会破坏文档结构。两种处理方式:
- 字符转义(默认):替换为实体,如
<→<。通用、兼容性最好,但长文本可读性差 - CDATA 包裹:用
<![CDATA[...]]>包裹,内容原样保留。适合含大量特殊字符的长文本(如 HTML 片段、代码、正则)
开启「特殊字符用 CDATA」后,含 <、>、& 的文本会自动用 CDATA 包裹。工具会处理 CDATA 中 ]]> 分隔符冲突,自动拆分为多段。
6. JSON 的 null 如何表示为 XML?
JSON 有 null,XML 没有原生的 null 概念。两种表示方式:
- 默认(空元素):
<note/>或<note></note>,简洁但无法区分「null」与「空字符串」 - xsi:nil:
<note xsi:nil="true"/>,遵循 XML Schema 规范,明确标记为 null,根节点自动注入xmlns:xsi命名空间
对接 XML Schema 校验的系统建议开启 xsi:nil 模式,普通场景空元素即可。
7. XML 声明 <?xml?> 的作用是什么?
XML 声明位于文档首行,格式 <?xml version="1.0" encoding="UTF-8"?>,包含:
- version:XML 版本(1.0 最常用,1.1 极少用)
- encoding:字符编码,UTF-8 是现代默认值
- standalone(可选):是否依赖外部 DTD,yes / no
XML 规范不强制要求声明,但多数解析器推荐包含。SOAP、Office 文档、Android 资源等场景要求必须有声明。可在选项中关闭。
8. well-formed 校验检查什么?
well-formed(良构)是 XML 文档的最低合规要求,校验包括:
- 有且仅有一个根元素
- 所有开始标签都有对应的结束标签
- 标签嵌套正确(不允许交叉嵌套,如
<a><b></a></b>非法) - 属性值用引号包裹
- 文本节点中无未转义的
<或& - 标签名符合命名规则
注意:well-formed 不等于 valid(有效)。valid 还需通过 DTD 或 XML Schema 校验语义约束。本工具保证生成结果 well-formed,并提供校验提示。
9. 与 CSV / JSON 互转、YAML 格式化工具有什么区别?
- CSV / JSON 互转(/csv-json):CSV ↔ JSON 双向转换,面向表格数据(带表头、扁平结构)
- YAML 格式化(/yaml):YAML ↔ JSON 双向转换与格式化,面向配置文件
- 本工具(/json-to-xml):JSON → XML 单向导出,面向 SOAP / SVG / Office / 旧系统对接
三者互补:表格数据用 CSV 工具,配置文件用 YAML 工具,对接 XML 系统用本工具。需要反向转换(XML → JSON)可借助浏览器 DOMParser 自行实现。
10. 数据会上传到服务器吗?
不会。所有转换在浏览器本地完成,不发起任何网络请求。本工具基于纯原生 TypeScript 实现,无第三方依赖,数据不会离开你的设备。适合处理敏感配置、密钥、个人信息等不可外泄的数据。