跳到正文

JSON 转 XML 在线转换

把 JSON 转成带缩进、格式有效的 XML:键变成元素,数组重复元素,以 @ 开头的键变成属性。转换在浏览器中完成。

转换为
在浏览器中运行 · 无需上传工作原理

JSON 转 XML 使用方法

  1. 1

    粘贴 JSON

    可以是对象、记录数组或 API 响应;也可以直接拖入 .json 文件。

  2. 2

    设置元素名称

    “根元素”留空则取自数据;还可以设置普通数组中各项使用的元素名称。

  3. 3

    下载 XML

    可用空格或制表符缩进,也可以输出为一行,并可选择是否带 <?xml?> 声明。

限制与 Pro

JSON 文件最大 500 MB;粘贴文本的大小取决于浏览器能容纳的上限。

JSON 文件最大 4 GB。 了解 Pro

关于 JSON 转 XML

JSON 转 XML 可以把 JSON 数据写成 XML 文档,适用于仍在使用 XML 交换数据的系统,例如财务和 ERP 导入、电子发票规范、SOAP 服务、Android 资源以及许多旧系统的对接。

每个键都会变成一个元素,每个数组会重复对应的元素,因此 {"book": [{…}, {…}]} 会生成并列的两个 <book> 元素,这正是 XML 模式通常要求的结构。XML 不能以数组作为顶层,所以顶层数组会被包进一个根元素,每个条目对应一个 item 元素;如果顶层只有一个键且值为数组,例如 {"orders": […]},该键会成为根元素,子元素则是单数形式的 <order>。对象只有一个顶层键时,这个键就是根元素;否则根元素名为 root,或你输入的名称。

以 @ 开头的键会变成属性,"#text" 键会成为元素的文本,与 XML 转 JSON 方向使用同一套约定,数据因此可以双向往返。开启“将简单值写为属性”,可以得到 <user id="1" name="Ann"/> 这样的紧凑记录。

JSON 允许的键名 XML 并不都允许,所以名称会被自动修正:空格和其他非法字符变成下划线,以数字开头的名称前面会加下划线("1st place" → _1st_place)。文本会被转义(内容中的 &、< 和 >,属性中的引号),XML 禁用的字符会被删除,null 变成空元素,嵌套数组会生成 item 子元素。

输出为 UTF-8 编码,是格式良好的 XML;不会按 XSD 模式校验,元素顺序和必填字段仍取决于你的数据。

隐私

你粘贴或拖入的 JSON 由当前浏览器标签页中的后台线程读取并转换为 XML,不会发送到服务器,也不会保存在任何地方。

JSON 转 XML:常见问题

如何生成属性而不是子元素?
在 JSON 中给键加上 @ 前缀,例如数组中的记录 {"@id": 5, "name": "Ann"} 会得到 <item id="5"><name>Ann</name></item>。若想把所有简单值(文本、数字、true/false)一次变成属性,请开启“将简单值写为属性”;对象和数组仍会成为子元素,因为属性只能存放文本。
根元素会叫什么名称?
当 JSON 是只有一个键的对象,例如 {"catalog": {…}},这个键就是根元素;否则转换器会把所有内容包进 <root>。在“根元素”中输入任意名称即可覆盖这两种情况;其中的非法字符会被替换,以保证文档有效。
数组在 XML 中如何表示?
键下的数组会重复该键的元素:"tag": ["a", "b"] 会变成 <tag>a</tag><tag>b</tag>。没有自身键的数组,例如顶层数组或数组中的数组,会生成 item 元素,名称可以修改。空数组会生成一个空元素,这样键不会丢失。
特殊字符会被转义吗?
会。文本中的 & 和尖括号会变成 &amp;、&lt; 和 &gt;;属性值中的引号、制表符和换行会写成字符引用。XML 1.0 禁用的控制字符会被丢弃。任何文字的字母(包括 emoji)都会原样写出,因为文档是 UTF-8 编码。
结果可以按我的 XSD 校验吗?
这里不能:转换器生成的是格式良好的 XML,但并不了解你的模式。请按模式的要求组织 JSON(键名、键的顺序、用 @ 表示属性),转换后再用 XML 编辑器或接收系统校验文件。输出中的键顺序与 JSON 中的顺序一致。

此工具的其他用途