JSON 与 XML 互转:面向两个数据世界的实用转换工具
大多数开发者不管愿不愿意,都得同时和 XML 与 JSON 打交道。现代 Web API 几乎清一色地使用 JSON,但只要你一接触银行、保险公司、政府接口、企业 ERP 或老旧的 SOAP 服务,XML 就又冒了出来。本页面上的 JSON 转 XML 工具能直接在你的浏览器中把 JSON 转成 XML,再把 XML 转回 JSON,让你无需把敏感载荷复制到远程服务,就能在这两种格式之间穿梭。

XML 和 JSON 究竟是什么
XML(可扩展标记语言)是一种围绕嵌套标签、属性和命名空间构建的标记格式。它的设计初衷是用于文档和结构化数据交换,并携带了大量机制:模式(XSD)、命名空间、处理指令、注释、CDATA 区段,以及顶部的一份正式声明。正是这份丰富性使得 XML 至今仍主导着遗留系统和企业系统。你会在 SOAP Web 服务、RSS 和 Atom 订阅源、配置文件(Spring、Maven、.NET 应用配置)、办公文档格式,以及 SWIFT 和 ISO 20022 等金融报文标准中见到它 — 银行和保险公司每天仍在用 XML 交换数据。
JSON(JavaScript 对象表示法)则简单得多:带键值对的对象、数组、字符串、数字、布尔值和 null。它几乎能一对一地映射到几乎每种编程语言的数据结构上,这正是它接管现代 Web API、REST 接口、移动应用以及 package.json 这类配置文件的原因。JSON 通常比等价的 XML 小 30 到 50 个百分点,解析速度也明显更快,部分原因在于它省去了让 XML 显得冗长的闭合标签和属性机制。
对转换至关重要的关键差异
这两种格式的重叠之处足以让它们相互映射,但并不干净。少数几处结构性差异几乎制造了所有的摩擦:
- 属性还是子节点。XML 会区分
<user id="1">(一个属性)和<user><id>1</id></user>(一个子元素)。JSON 没有这种概念,所以转换工具会自己发明一个。按惯例,属性会被折叠进一个诸如@attributes的键中,或加上@前缀,而元素文本则落入一个像#text这样的键里。 - 数组。JSON 有原生数组,XML 则没有。XML 中的列表只不过是同一个标签的重复,比如连续三个
<item>元素。转换工具必须推断:何时应当把重复的同级元素塌缩成一个 JSON 数组,何时又该让单个元素保持为一个普通对象。 - 命名空间。XML 用命名空间(
xmlns:soap这类前缀)来避免跨模式的名称冲突。JSON 没有任何对应物,所以这些前缀要么作为字面字符留在键里,要么被剥除。 - 冗长度与元数据。XML 可以通过属性把元数据附加到节点上;JSON 则把一切都表达为键和值。这使 JSON 更紧凑、更易读,而 XML 则通过 XSD 模式保留了校验能力。
需要留意的转换陷阱
把 JSON 转成 XML 再转回 JSON 并指望得到完全相同的结果,是经典的错误。除非你掌控规则,否则这种转换在两个方向上都是有损的。请记住以下几点:
- 属性会被搞乱。当你把 JSON 转成 XML 时,工具需要一条规则来决定哪些键变成属性、哪些变成元素。反方向转换时,属性必须落到某个地方,而这个"某处"(
@前缀、@attributes块)在不同的库之间各不相同。如果下游解析器期望的是另一种约定,那么即便什么都没丢失,数据看起来也会不对。 - 单个元素还是数组。一个只含一个
<item>的 XML 订阅源会产生一个 JSON 对象;含有两项的同一订阅源则会产生一个 JSON 数组。假定结果是数组的代码会在单项的情形下崩溃。这是 RSS 和 SOAP 解析错误的一个常见来源。 - 命名空间泄漏或消失。取决于所用工具,
soap:Body可能会变成一个字面命名为soap:Body的键,也可能前缀被完全丢弃,从而改变文档的含义。 - 混合内容与类型。XML 把一切都当作文本,所以像
true或42这样的值在转成 JSON 后可能仍是字符串,而反方向则没有给注释或 CDATA 留下原生的容身之处。

为什么本地转换很重要
JSON 和 XML 载荷往往是开发者经手的最敏感的东西:带令牌的 API 响应、带账号的 SOAP 报文、带凭据的配置文件。一款在你浏览器中运行的转换工具绝不会上传其中任何内容。解析和序列化都在你的机器上进行,没有任何内容被发送到服务器,而且页面加载完成后你可以离线使用该工具。对于调试生产数据或任何处于合规约束下的事务,这就是一次安全的快速检查与一次意外数据泄露之间的区别。
如果你需要事后整理结果,请把它与我们其他的 数据转换工具 搭配使用,或在把输出交给流水线中的下一个工具之前,用 JSON 格式化工具 把它整理干净。
常见问题
转换工具会把我的 JSON 或 XML 上传到任何地方吗?
不会。JSON 转 XML 和 XML 转 JSON 的转换都完全在你的浏览器中运行。你的数据永远不会离开你的设备,而且页面加载后该工具可离线工作。
转成 JSON 时 XML 属性是如何处理的?
由于 JSON 没有原生的属性概念,XML 属性会被放进一个专用的键中,通常加上一个 at 符号前缀,或被归到一个属性块下。元素的文本内容会被单独存储,因此两者都能在转换中保留下来。
为什么我的单个 XML 元素变成了对象而不是数组?
XML 没有原生数组,所以列表只是一个重复的标签。当只有一个元素时,转换工具无法把它与一个普通对象区分开,于是它就变成了对象。两个或更多同名标签的同级元素则会塌缩成一个 JSON 数组。
像 soap 或 xmlns 这样的 XML 命名空间会怎样?
JSON 没有与 XML 命名空间对等的东西。取决于转换方式,前缀会作为字面文本保留在键内,或被剥除。如果你的下游消费方依赖命名空间前缀,请检查输出。
我能把 JSON 转回 XML 并得到原始文档吗?
不总是能完全一致。转换在两个方向上都是有损的,因为注释、CDATA 以及属性与元素之分这类 XML 特性,在 JSON 中没有干净的对应物。当你掌控两边的命名规则时,往返转换效果最好。
与 JSON 相比,XML 如今还用在哪里?
XML 存在于遗留系统和企业系统中:SOAP Web 服务、RSS 和 Atom 订阅源、配置文件,以及 SWIFT 和 ISO 20022 等金融报文。JSON 则主导着现代 Web API、REST 接口和移动应用。
