工具介绍
XML 和 JSON 都是树状数据格式,但用途不同:老旧的企业级 API、SOAP 服务、RSS/Atom 订阅源以及许多配置文件仍然使用 XML,而现代 REST API 和 JavaScript 代码几乎全部使用 JSON。这个工具在两者之间转换,让你在对接新旧系统时不必手写其中任何一种格式。
转换逻辑直接基于浏览器内置的 DOMParser API 来解析 XML,并按照 W3C XML 1.0 规范 定义的结构生成 XML——因此生成的 XML 是格式良好的,接受的 XML 也会按浏览器或任何符合标准的 XML 库同样的方式解析。
由于 XML 有 JSON 没有的概念(属性、文本与元素混合内容、必须有单一根元素),而 JSON 有 XML 没有的概念(原生数组、布尔值、数字),这个工具采用了一套广泛使用的约定:XML 属性 `name="value"` 会变成 JSON 键 `"@_name": "value"`;元素文本内容在没有子元素或属性时直接变成字符串值,否则变成与属性并列的 `"#text"` 键;同名的重复同级元素会变成 JSON 数组。
为什么使用它?
- 双向转换——在同一个界面完成 JSON 转 XML 或 XML 转 JSON。
- 正确处理嵌套——任意深度的嵌套 JSON 对象会变成嵌套 XML 元素,反之亦然。
- 数组映射为重复元素——某个键下的 JSON 数组会变成同样数量、同名的同级 XML 元素,重复的 XML 标签也能还原为 JSON 数组。
- 保留 XML 属性——采用 `@_属性名` 约定,属性数据不会被悄悄丢弃。
- 支持复制到剪贴板或下载为 .json 或 .xml 文件。
- 100% 本地运行——你粘贴的任何内容都不会被上传。
使用方法
- 选择方向:“XML → JSON”或“JSON → XML”。
- 将数据粘贴到输入框中。
- 点击“转换”。
- 查看结果,然后复制或点击“下载”保存文件。
示例
输入
{"user":{"name":"Alice","age":30}}输出
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>Alice</name>
<age>30</age>
</user>唯一的顶层 JSON 键(“user”)会成为 XML 根元素;如果 JSON 有多个顶层键,工具会用 <root> 元素包裹全部内容,因为 XML 要求有且仅有一个根元素。
实用技巧
- 把老旧的 XML 配置文件(比如旧应用的设置文件)迁移到基于 JSON 的现代系统:粘贴 XML,转换后再根据需要调整字段名。
- 从 JavaScript 测试 SOAP 或 XML-RPC 接口:先在这里把 JSON 请求体转换为 XML 再发送,或者把 XML 响应转换回 JSON 方便查看。
- 如果你的 JSON 用数组表示 XML 中会用重复元素表示的数据,请先把数组嵌套在单个键下(例如 {"items":{"item":[1,2,3]}}),而不是直接使用顶层数组,因为 XML 不能有多个根元素。
为什么 @_ 属性约定很重要
JSON/XML 转换中最棘手的部分是:XML 元素可以同时携带两种数据——属性和子内容——而普通 JSON 对象只有键和值。如果没有一套约定把两者区分开,简单的转换器要么会完全丢失属性,要么会把属性和子元素混在一起,导致无法可靠地转换回去。`@_名称` 前缀约定(也被 JavaScript 生态中广泛使用的库采用)通过给属性一个独特、明确的键形式解决了这个问题,因此 `<product id="42">Widget</product>` 可以干净地互相转换为 `{"product":{"@_id":"42","#text":"Widget"}}`,而不会丢失 id 或猜错哪个值对应什么。
常见问题
如果 JSON 有多个顶层键会怎样?
XML 要求单一根元素,所以如果你的 JSON 对象有多个顶层键(例如 {"a":1,"b":2}),输出会被包裹在 <root> 元素中:<root><a>1</a><b>2</b></root>。如果 JSON 恰好只有一个顶层键,该键会直接成为根元素名。
XML 属性在 JSON 中如何表示?
像 <user id="7"> 这样的属性会变成结果 JSON 对象中的键 "@_id": "7"。这是一种常见且有文档记录的约定(fast-xml-parser 等库也在使用),可以让属性与子元素区分开来。
重复的 XML 元素会变成 JSON 数组吗?
会的。如果某个元素有多个同名子元素,例如 <items><item>1</item><item>2</item></items>,转换为 JSON 会得到 {"items":{"item":["1","2"]}}。把这个 JSON 再转回 XML,会重新生成重复的 <item> 元素。
把 XML 转成 JSON 时,数字和布尔值会保留吗?
XML 本身没有数字或布尔值的概念——一切都是文本——所以文本内容会以 JSON 字符串的形式出现(例如 "30" 而不是 30)。如果需要数值类型,转换后还需要自行处理这些字段。
我的数据会被上传吗?
不会。解析和转换完全在浏览器中通过 JavaScript 完成,使用内置的 DOMParser API——不会向任何服务器发送数据,因此可以放心用于处理私有配置文件或内部 API 数据。