JSON 转 XML
免费在线 JSON 转 XML 工具,将 JSON 对象或数组自动转换为标准 XML 格式。JSON 对象包装为 <root> 根节点,数组自动包装为 <root><item> 重复节点结构,prettyPrint 格式化输出,纯浏览器本地处理不上传。
相关推荐
关于 JSON 转 XML:把 JSON 数据自动转换为标准 XML 格式
JSON 转 XML 是把 JSON 格式的数据(JSON 对象或 JSON 数组)转换为 XML(eXtensible Markup Language)格式的过程。JSON(JavaScript Object Notation)是现代 Web API 的标准数据格式,XML 是企业系统、SOAP Web Service、配置文件、Office 文档的传统数据格式。两种格式各有优势:JSON 简洁易解析,XML 严格自描述、广泛支持命名空间和 schema 验证。开发中常需要把 JSON 数据转换为 XML 以对接遗留系统或满足特定业务需求,本工具就是要把这个过程自动化。
本工具的核心是基于 xmlbuilder2 库把 JSON 节点递归转换为 XML 元素。转换规则非常简单:JSON 对象的 key 变成 XML 元素名,value 变成元素文本内容;数组则被包成重复的 <item> 子元素。JSON 对象默认包装为 <root> 根节点,数组包装为 <root><item>...</item></root> 结构。prettyPrint: true 参数启用美化输出,自动添加缩进和换行。
数组到重复元素的映射是 JSON 转 XML 的关键设计。XML 没有原生的数组概念,需要通过重复元素(如 <item>1</item><item>2</item>)来表示列表数据。本工具统一使用 <item> 作为数组元素子节点名称,外层用 <root> 包裹形成符合 XML 数据交换约定的标准结构。生成的 XML 兼容 RSS、SOAP、企业 XML 协议等常见应用场景。
prettyPrint 模式生成的 XML 可读性远高于 minify 模式。开发人员可以直接用文本编辑器、XML 编辑器(XMLSpy、oXygen)或浏览器打开查看,而不必先经过 xmllint 等格式化工具。这一设计在调试和手动调整 XML 时特别有用。
JSON 的基本类型到 XML 的映射规则很简单:字符串直接作为元素文本(如 <name>Alice</name>);数字转为字符串形式(如 <age>30</age>);布尔转为字符串 'true'/'false';null 转为空元素或省略。所有非字符串类型在 XML 中都丢失了类型信息,解析时需要 schema 或类型提示还原。
嵌套对象会递归生成对应的 XML 树。例如 { "user": { "name": "Alice", "age": 30 } } 会变成 <root><user><name>Alice</name><age>30</age></user></root>。这种结构保留了原始 JSON 的层级关系,方便 XML 解析器通过 XPath 查询。
本工具采用纯元素映射模式,所有 JSON 数据都转为 XML 元素,不使用 XML 属性(attribute)。这是因为元素映射更直观、可读性更好,且支持更复杂的嵌套结构。如果业务需要属性形式(如 <node attr="value"/>),可以手动调整生成的 XML,或使用 XSLT 转换。
实时转换是工具的实用功能。输入 JSON 后 400ms 防抖自动触发转换,配合 5 个键盘快捷键(macOS ⇧⌘+Enter/F/O/D/K),用户可以快速完成转换、格式化、上传、下载、清空等常用操作,无需鼠标点击。
JSON 错误自修复提升了工具的容错性。现实中用户输入的 JSON 经常有尾随逗号、单引号、缺引号、注释等小问题。内置 tryFixJSON 函数会在 JSON.parse 失败时自动尝试修复常见错误,修复成功后会提示用户;如果仍无法解析,会在右侧显示具体错误位置和原因。
纯前端处理是本工具的核心架构。所有 JSON 解析、XML 生成都在浏览器 JavaScript 中执行,不向任何服务器发送数据。这种设计有两点核心好处:第一,JSON 数据可能包含敏感信息(用户数据、API key、内部业务),本地处理完全消除泄露风险;第二,转换速度仅受设备 CPU 限制,1MB 以内的 JSON 几乎瞬时转换完成,无需等待网络往返。
适用场景
- Android 国际化:把 JSON 多语言词条转换为 strings.xml 资源文件格式,做安卓 APK 多语言包打包。
- iOS 客户端工程:把 JSON 应用元数据转为 Info.plist 的 XML 格式,用于 XCode 打包 IPA 提交 App Store 审核。
- 金融支付对接:把 JSON 交易明细转成 ISO 20022 或 SWIFT MT 标准报文的 XML 格式,对接银行核心清算系统。
- 医疗信息化集成:把 JSON 电子病历或检验报告转为 HL7/FHIR 标准 XML,提交到区域卫生信息平台做归档。
- Java 老项目迁移:把 JSON 配置转成 Spring XML、Tomcat server.xml 或 Maven pom.xml 格式,迁移历史 XML 配置项目。
- 接口回归测试:把生产正常响应的 JSON 转成 XML 作为 golden file 快照,用于回归断言对比异常返回。
- 客服工单处理:把 IM 在线聊天记录的 JSON 导出为 XML 工单附件,导入 Zendesk 或 Salesforce 客服系统。
- 业务日报生成:把 JSON 业务指标转成 XML 数据源,再通过 XSLT 渲染为 HTML 模板邮件定时发送给业务方。
- 工具链多步串联:先用 json-format 修复压缩 JSON 排版,再用 jsonpath 过滤指定字段,最后用本工具转 XML 处理多步流水线。
- 特殊字符编码排查:把含 GBK/EUC 中文或 emoji 的 JSON 转 XML 后,通过 XML 解析器核对实体转义和编码声明是否正确。
- 下游多格式输出:同一份 JSON 先转 XML 给企业系统,再转 CSV 给数据团队,最后转 YAML 给运维,做多下游分发。
- 前端 Monaco 高亮展示:把接口 mock JSON 转成 XML 后贴到 Swagger UI 或 ApiFox 文档展示,给前端的 XML 解析代码做对照样例。
- GitHub Actions 制品:把 CI 收集的 JSON 覆盖率或测试报告转 XML,用作 SonarQube 或 Codecov 通用 reporting XML 上传。
使用方法
- 在左侧输入框粘贴 JSON 内容,或点击「上传」按钮选择 .json/.txt 文件,或点击「示例」加载内置样例。
- 工具会自动转换(输入后 400ms 防抖);在右侧查看生成的 XML 代码,CodeMirror XML 语法高亮便于阅读。
- 可点击「格式化」按钮(⇧⌘+F)将 JSON 重新缩进为 2 空格,便于阅读复杂 JSON 结构。
- 点击「复制」将 XML 复制到剪贴板,或点击「下载」保存为 output.xml 文件(MIME: text/xml)。
- 如需修改根节点名称或添加命名空间,可手动编辑生成的 XML。
- 将 XML 粘贴到目标系统(API 客户端、XML 编辑器、企业系统)使用。
功能特点
- 智能节点包装:JSON 对象自动包装为 <root> 根节点,数组自动包装为 <root><item> 重复节点,符合 XML 数据交换约定。
- prettyPrint 美化输出:基于 xmlbuilder2 库的 prettyPrint 模式生成带缩进和换行的可读 XML,无需手动格式化。
- 实时自动转换:输入 JSON 后 400ms 防抖自动转换,配合 5 个键盘快捷键提升操作效率。
- JSON 错误自修复:内置 tryFixJSON 修复函数,自动处理尾随逗号、单引号、缺引号等常见语法错误。
- 基本类型兼容:支持 null、boolean、number、string 等 JSON 基本类型,全部转为 XML 元素文本。
- 嵌套对象递归:任意深度的嵌套对象会递归生成对应的 XML 元素树,保持数据结构完整性。
- 数组多层支持:一维和多维数组都能正确转换为 <item> 重复节点结构。
- JSON/XML 双重高亮:左侧使用 CodeMirror JSON 语法高亮,右侧使用 XML 语法高亮,可读性强。
- 完整快捷键体系:5 个常用快捷键(转换/格式化/上传/下载/清空),支持 macOS 和 Windows/Linux。
- 复制与下载:一键复制到剪贴板,或下载为标准 output.xml 文件(MIME: text/xml)。
- 纯浏览器本地处理:所有 JSON 解析、XML 生成都在浏览器 JavaScript 中完成,原始数据不上传。
- 历史记录恢复:自动保存最近 200 条历史记录,页面加载时自动恢复上次输入内容。
常见问题
怎么把 JSON 转成 XML 格式?
把 JSON 内容粘贴到左侧输入框,工具会自动将其转换为标准 XML 格式。JSON 对象会包装为 <root> 根节点(如 { "name": "Alice" } → <root><name>Alice</name></root>),数组会包装为 <root><item>...</item> 重复节点结构。400ms 后自动转换,无需手动点击。
JSON 数组怎么转成 XML?
JSON 数组会被工具自动包装为两层结构:外层是 <root> 根节点,内层是 <item> 重复节点。例如 [{"a":1},{"a":2}] 会被转换为 <root><item><a>1</a></item><item><a>2</a></item></root>。这种设计符合常见的 XML 数据交换格式约定(如 RSS、SOAP 消息)。
生成的 XML 格式是美化过的吗?
是的,工具基于 xmlbuilder2 库的 prettyPrint 模式生成美化过的 XML,输出带缩进和换行的可读格式。开发者可以直接复制到 SOAP 工具、XML 编辑器或配置文件中阅读,无需手动格式化。
支持哪些 JSON 数据结构?
支持所有合法 JSON 数据结构:基本类型(null、boolean、number、string)、数组(一维或多维)、嵌套对象(任意深度)。数组在每个层级都会被包成 <item> 重复节点。JSON 中包含函数、Symbol、undefined 等 JavaScript 特殊值不是合法 JSON,无法转换。
下载的 XML 文件能直接用于 SOAP 或 RSS 吗?
可以。生成的 XML 符合标准 XML 1.0 规范,能被大多数 SOAP 工具、RSS 阅读器、XML 数据库(如 BaseX、eXist)以及企业系统(SAP、Oracle)直接解析。下载文件名为 output.xml,可被任何 XML 处理工具读取。
JSON 解析失败怎么办?
如果 JSON 存在尾随逗号、缺引号、单引号代替双引号等常见错误,工具会自动调用 tryFixJSON 尝试修复。修复成功后会提示用户;如果无法修复,会在右侧显示具体错误位置和原因。可使用 2/4 空格缩进重新格式化后再尝试。
可以自定义 XML 根节点名称吗?
本工具统一使用 root 作为根节点名称,数组元素使用 item 作为子节点名称。这是 XML 数据交换中最通用的命名约定,避免命名冲突。如果你需要自定义根节点或子节点名称,可以手动编辑生成的 XML,或在 JSON 中添加根键(如将 { "data": [...] } 转换为 <root><data>...</data></root>)。
JSON 数字和布尔值在 XML 中如何表示?
XML 没有原生数字和布尔类型,所有值都被转为字符串。例如 JSON 中的 true 会变成 XML 元素 <isActive>true</isActive>,数字 30 会变成 <age>30</age>。解析时 XML 解析器会按 schema 或类型提示自动转换。如果需要保留类型信息,建议使用 JSON Schema 或 DTD/XSD 验证。
支持 XML 命名空间(namespace)吗?
本工具生成标准 XML(无命名空间),适合大多数通用场景。如果需要 SOAP 或 WSDL 等需要命名空间的 XML,可以手动编辑生成的 XML 添加 xmlns 声明,或使用专门的 SOAP 工具链。
支持 XML 属性(attribute)吗?
不支持。工具采用纯元素(element)映射模式:所有 JSON key 转为 XML 元素,所有 value 转为元素文本内容。如果你需要属性形式(如 <node attr='value'/>),需要手动调整生成的 XML 或使用 XSLT 转换。
支持哪些输入文件类型?
支持 .json 和 .txt 文件(UTF-8 编码)。点击「上传」按钮选择本地文件,工具通过浏览器原生 FileReader API 读取,不会上传到服务器。上传成功后内容自动填入输入框并触发转换。
键盘快捷键有哪些?
工具支持以下快捷键:macOS 用户 ⇧⌘+Enter 转换、⇧⌘+F 格式化、⇧⌘+O 上传、⇧⌘+D 下载、⇧⌘+K 清空;Windows/Linux 用户用 Ctrl 替代 ⌘。这些快捷键遵循主流 JSON 编辑工具的约定,熟练使用可显著提升操作效率。
故障排查
生成的 XML 根节点叫 root,能改吗?
本工具统一使用 root 作为根节点名称(数组元素为 item)。如果业务需要自定义名称(如 <response>、<data>),有两种方案:1) 手动编辑生成的 XML,用文本编辑器的查找替换功能把 <root> 改为目标名称;2) 在 JSON 数据中包一层(如 {"response": {...}}),生成的 XML 会变成 <root><response>...</response></root>,然后用查找替换去掉外层 <root>。
XML 解析报错 'unclosed token' 怎么办?
原因通常是 JSON 字符串包含 XML 特殊字符(<、>、&)未正确转义。本工具会自动将这些字符转为 XML 实体(< > &),但极少数边界情况(如 CDATA 段、注释)可能需要手动处理。检查 JSON 中的 < 和 > 字符,确认它们是数据内容而非意外的标签开始。
数组元素如何自定义标签名(不用 item)?
本工具统一使用 <item> 作为数组元素子节点名称(符合 RSS、SOAP 等通用约定)。如果业务需要其他名称(如 <row>、<entry>),可以手动编辑生成的 XML,用查找替换把 <item> 替换为目标名称并同步调整结束标签 </item>。
JSON 数字变成字符串丢失了类型怎么办?
XML 没有原生数字类型,所有 value 都转为字符串。如果需要在解析端区分类型,方案:1) 使用 XSD schema 验证 XML 并指定元素类型(xs:integer、xs:boolean);2) 在 JSON 中预先用 key 名称暗示类型(如 price_string、count_number);3) 转换后用 XSLT 脚本根据业务规则转换类型。
如何让数字在 XML 中保持数字类型?
XML 1.0 标准没有原生数字类型。如果必须保留类型信息,方案:1) 使用 XSD schema 在 <xs:element name="age" type="xs:integer"/> 中声明;2) 使用 JSON Schema 配合 XML Schema 转换工具;3) 在数据外层加 XSI 命名空间(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")。
下载的 .xml 文件用什么打开?
下载文件 output.xml 是 UTF-8 编码的标准 XML 文件,可用任何文本编辑器(VS Code、Sublime、Notepad++)或专业 XML 编辑器(XMLSpy、oXygen)打开。也可直接拖入浏览器(Chrome、Firefox)查看格式化的树状结构。SOAP/RSS 阅读器、企业中间件、XML 数据库(BaseX、eXist)也能直接读取。
JSON 中含 emoji 或中文会出错吗?
不会。本工具支持完整的 UTF-8 编码,包括中文、日文、韩文、emoji 等 Unicode 字符。xmlbuilder2 库会自动处理 XML 实体转义,emoji 和中文都会按原样出现在 XML 元素中,无需特殊处理。
术语表
- JSON (JavaScript Object Notation)
- 轻量级数据交换格式,基于 JavaScript 对象语法但独立于编程语言。支持对象 ({}), 数组 ([]), 字符串, 数字, 布尔, null 六种基本类型。广泛用于 REST API、前后端数据传输、配置文件等场景。
- XML (eXtensible Markup Language)
- 可扩展标记语言,由 W3C 于 1998 年制定。使用尖括号标签描述数据结构和内容,支持命名空间、Schema 验证、XSLT 转换。是 SOAP Web Service、Office Open XML、RSS、Atom 等的标准格式。
- xmlbuilder2
- JavaScript XML 构建库,用于以编程方式生成结构化 XML 文档。支持命名空间、属性、美化输出(prettyPrint)、CDATA 段、注释等高级特性。本工具基于此库实现 JSON 到 XML 的自动转换。
- 节点包装(root / item)
- 本工具的 XML 节点命名约定:JSON 对象统一包装为 <root> 根节点;JSON 数组的元素统一包成 <item> 重复子节点。这种命名避免了与用户数据中的 key 冲突,符合 XML 数据交换的通用约定。
- prettyPrint
- xmlbuilder2 库的输出模式。启用后生成的 XML 自动添加缩进和换行(如 2 空格缩进),可读性高;禁用时输出紧凑无空白(minify)。本工具默认启用 prettyPrint。
- SOAP (Simple Object Access Protocol)
- 基于 XML 的 Web 服务通信协议。SOAP 消息由 SOAP envelope(XML 命名空间)包裹,内含 header 和 body(XML payload)。本工具可生成 SOAP body 需要的 XML payload,再手动添加 envelope 即可。
- RSS / Atom feed
- 基于 XML 的内容订阅格式。RSS 2.0 格式以 <rss><channel><item> 结构组织内容,Atom 使用 <feed><entry> 结构。本工具生成的 <root><item> 模式与 RSS 类似,可作为 RSS 生成器的中间步骤。
- 元素 vs 属性
- XML 中数据表示的两种方式。元素用开始/结束标签包裹(如 <name>Alice</name>),属性用 key="value" 形式(如 <user name="Alice"/>。本工具采用纯元素映射,不使用属性。
- CDATA 段
- XML 中的特殊语法 <![CDATA[...]]>,用于在元素内嵌入含特殊字符(如 <、>、&)的文本而无需转义。本工具默认不生成 CDATA 段,特殊字符会被自动转义为 XML 实体(如 < > &)。
- XML 命名空间(namespace)
- 通过 xmlns 属性避免元素名称冲突的机制,格式如 xmlns:prefix="uri"。常用于 SOAP(http://schemas.xmlsoap.org/soap/envelope/)和 XHTML 等标准。本工具不自动添加命名空间,需要时手动编辑生成的 XML。
- XPath
- XML 路径查询语言,用于在 XML 文档中定位节点。如 /root/user/name 可查询根元素下 user 元素下的 name 元素。本工具生成的 XML 结构便于 XPath 查询。
- XSLT
- XML 样式表转换语言,用于将一种 XML 格式转换为另一种(如 XML 转 HTML、XML 转 PDF)。本工具生成的 XML 简单结构便于 XSLT 后处理。
- tryFixJSON
- 本工具内置的 JSON 修复函数,会自动处理尾随逗号、单引号代替双引号、缺引号的 key、注释等常见 JSON 语法错误。在 JSON.parse 失败时自动调用,修复成功后会通知用户并继续转换。
JSON 类型到 XML 元素的映射规则
本工具基于 xmlbuilder2 的 JSON 到 XML 转换映射规则:
| JSON 值 | 示例 | XML 元素 | 映射规则 |
|---|---|---|---|
string | "Alice" | <name>Alice</name> | 字符串直接作为元素文本内容 |
number | 30 | <age>30</age> | 数字转为字符串形式(类型信息丢失) |
boolean | true | <isActive>true</isActive> | 布尔转为字符串 'true'/'false' |
null | null | <field></field> 或省略 | null 转为空元素(依赖 xmlbuilder2 默认行为) |
object | {"a":1} | <root><a>1</a></root> | 对象包装为 <root> 根节点,key 转为子元素 |
array of objects | [{"a":1}] | <root><item><a>1</a></item></root> | 数组包成 <item> 重复节点 |
nested object | {"user":{"name":"x"}} | <root><user><name>x</name></user></root> | 嵌套对象递归生成对应元素树 |
nested array | [[1,2]] | <root><item><item>1</item><item>2</item></item></root> | 多层数组递归包装 <item> |
JSON vs XML 格式对比
两种数据格式在不同维度上的对比,帮助理解何时选择 JSON 或 XML:
| 维度 | JSON | XML | 说明 |
|---|---|---|---|
| 语法 | { } : [ ] 简洁 | < > </> 冗长 | JSON 语法更简洁,XML 标签更冗长但可读性高 |
| 数据类型 | 原生支持 number/bool/null | 全是字符串 | JSON 保留类型,XML 需靠 schema 验证类型 |
| 数组 | 原生 [1,2,3] | 重复元素 <i>1</i><i>2</i> | JSON 数组简洁,XML 数组依赖命名约定 |
| 注释 | 不支持(标准) | <!-- 注释 --> | XML 支持注释,JSON 标准不支持(仅 JSON5/JSONC) |
| 命名空间 | 无 | xmlns 支持 | XML 命名空间避免大型文档的命名冲突 |
| Schema 验证 | JSON Schema | XSD / DTD | 两者都有成熟的 schema 验证机制 |
| 解析性能 | 更快(~3-5x) | 较慢(标签开销) | JSON 解析更简单,XML 解析更复杂 |
| 使用场景 | REST API、前后端 | SOAP、企业、Office | 现代 Web 用 JSON,传统企业用 XML |
XML 特殊字符转义规则
本工具在 JSON 字符串包含 XML 特殊字符时自动进行的转义规则:
| 特殊字符 | XML 实体 | JSON 示例 | XML 输出 |
|---|---|---|---|
< | < | "<" | <field><</field> |
> | > | ">" | <field>></field> |
& | & | "&" | <field>&</field> |
" | " | "\"" | <field>"</field> |
' | ' | "'" | <field>'</field> |
Tab | 	 | "\t" | <field>	</field> |
Newline | | "\n" | <field> </field> |
Privacy & Security
本 JSON 转 XML 工具所有操作完全在你的浏览器本地完成:JSON 解析、XML 生成、prettyPrint 美化全部通过浏览器 JavaScript(基于 xmlbuilder2 库)在客户端执行,不会通过网络向任何服务器发送 JSON 内容、上传的文件或生成的 XML。文件上传使用浏览器原生 FileReader API 直接读取到内存,不经过任何中间服务。不使用 Cookie 追踪,不收集任何用户输入或使用数据。关闭或刷新页面后,所有输入和输出内容自动从内存清除。适合处理含敏感业务数据、企业内部 API 响应的 JSON。
Authoritative References
- W3CXML 1.0 规范 - W3C
- GitHubxmlbuilder2 GitHub 仓库
- W3CSOAP 1.2 规范 - W3C
- MDNJSON 规范 - MDN Web Docs
- RSS Advisory BoardRSS 2.0 规范
- MDNXPath 教程 - MDN
- JSON 压缩
- CSV 转 JSON
- JSON 转 CSV
- JSON Diff
- JSON Escape / Unescape
- JSON扁平化
- JSON 格式化
- JSON 生成器
- JSONPath 查询
- JSON 合并
- JSON 修复
- JSON Schema 校验
- JSON 排序
- JSON Stringify
- JSON 转 HTML
- JSON 转 Java
- JSON 转 Markdown
- JSON 转 SQL
- JSON 转 TOML
- JSON 转 TypeScript
- XML 转 JSON
- JSON 转 XML
- YAML 转 JSON
- JSON 转 YAML
- JSON 转 Python
- JSON 转 Go
- JSON 转 Rust
- JSON 转 Swift
- JSON 转 C#
- JSON 转 C++
- JSON 转 PHP