使用方法
- 把 JSON 粘贴到“JSON”中。它唯一的顶层成员会成为根元素。
- 属性用 @ 前缀表示,例如 @id;元素的文本用 #text 表示。
- 选择“缩进方式”;若想得到最短的 XML,请选择“不换行(压缩)”。
- 复制“XML”,或下载为 converted.xml。
逐条说明映射规则
XML 有元素和属性;JSON 有对象、数组和值。本映射单向地把两者联系起来。顶层是只含一个成员的对象:该成员的名称即为根元素。对象变为元素。以 @ 开头的成员变为属性;名为 #text 的成员变为元素的文本。其他成员变为同名的子元素。
数组为每一项生成一个子元素,且都使用数组的名称,因此一个书目列表写作重复的 book 元素。字符串、数字或 true、false 变为文本。null 和空对象变为空元素。空数组在 XML 中没有对应形式,因此被省略。
- 名称必须是合法的 XML 名称:像 first name 这种带空格的键,不能用作元素名。
- 数组中的数组会被拒绝,因为其项没有可用的元素名。
- 数字的文本按 JavaScript 的写法输出,因此超过15或16位有效数字的数字可能丢失位数,与 JSON 读取时的情况相同。
映射无法保留的内容
XML 没有类型,因此数字12与文本 "12" 的区别在转换回去时会丢失;XML 转 JSON 的工具会把看起来像数字的文本读作数字,除非关闭其类型判断。空对象和 null 在 XML 中看起来相同;只有一项的数组转回时会变成那一项。这些是映射本身的限制,不是工具的错误。
注释和处理指令不会被写出,因为 JSON 没有地方保存它们。元素内的文本会被转义,因此 XML 中的 &、< 和 > 仍保持为文本。
示例:默认的 catalog
默认 JSON 只有一个成员 catalog。它的 @version 变为 catalog 元素的 version 属性,它的 book 数组变为两个 book 元素。每个 book 以 @id 作为 id 属性,其 title、price 和 inStock 键变为子元素。第二本书的 price 为 null,变为空元素 price。
使用两个空格缩进并写入声明时,输出共八个元素:catalog、两个 book,第一本书的三个子元素与第二本书的两个子元素。计数显示8。
常见问题
怎样在 JSON 中写属性?
给键加上 @ 前缀。成员 "@id": "1" 会在保存它的元素上变为 id="1"。属性的值必须是文本、数字、true 或 false,不能是对象或数组。
为什么我的数组变成了几个同名的元素?
XML 没有数组。数组的每一项都变为一个以数组名称命名的元素,顺序不变。这是 XML 表示重复事物(如书籍或条目)的常用方式。
为什么顶层会出现错误?
XML 需要且只能有一个根元素。JSON 必须是只含一个成员的对象,例如 {"catalog": {...}};顶层是列表或多个成员,都不能构成一个文档。
为什么带空格的键会被拒绝?
XML 的元素名不能含有空格。转换前请先改名,例如改为 first-name 或 firstName。
我的 JSON 会被发送到服务器吗?
不会。转换在您的浏览器中进行,您粘贴的内容既不会发送到我们的服务器,也不会存储在那里。
资料来源
- RFC 8259:The JavaScript Object Notation (JSON) Data Interchange Format(英文)
- W3C:Extensible Markup Language (XML) 1.0, Fifth Edition(英文)
数据和文字最近核对于2026年11月10日星期二。