JSON XML 转换器

在浏览器中进行 JSON 与 XML 互转。中文键名原样作为元素名;遇到空数组、嵌套数组、XML 属性或混排文本时停止转换并给出具体路径。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
立即按根元素名和格式化输出选项转换 JSON 面板。在 JSON 内按 Ctrl+Enter(Mac 为 ⌘+Enter)也会执行此方向。
立即按格式化输出选项转换 XML 面板,以 XML 实际根元素名为准。在 XML 内按 Ctrl+Enter(Mac 为 ⌘+Enter)也会执行此方向。
清空两个面板、等待执行的转换和状态。在工具内按 Ctrl+L(Mac 为 ⌘+L)还会清空根元素名输入框。
选项
设置 JSON → XML 的外层元素名。空值使用 root,非法 XML 名称会停止转换。修改后点击 JSON → XML 应用。
控制两个方向的缩进。修改后,点击要转换的面板对应的方向按钮应用。
在此粘贴 JSON。停止输入 0.4 秒后会更新 XML。键必须是合法 XML 名称;空数组或嵌套数组会停止转换,并显示首个问题的路径。
复制当前全部 JSON 文本,包括编辑内容。编辑 XML 或 XML 转换失败会清空 JSON,并停用此按钮。
在此粘贴 XML。停止输入 0.4 秒后会更新 JSON。叶子值变为字符串,同名兄弟元素合为数组;属性或文本与子元素混排会停止转换。
复制当前全部 XML 文本,包括编辑内容。编辑 JSON 或 JSON 转换失败会清空 XML,并停用此按钮。
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

示例

中文键名

XML 1.0 的名称可以使用中文等多数文字,键名原样作为元素名,文本中的 < 与 & 会被转义:

{"订单": {"编号": "A-1001", "收货人": "张三", "备注": "易碎 & 勿压"}}
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <订单>
    <编号>A-1001</编号>
    <收货人>张三</收货人>
    <备注>易碎 &amp; 勿压</备注>
  </订单>
</root>

数组、null 与空对象

数组按键名重复生成元素,顶层数组使用 item;null 和 {} 都生成空元素:

{"商品": [{"名称": "键盘", "数量": 2}, {"名称": "鼠标", "数量": 1}], "优惠券": null, "扩展": {}}
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <商品>
    <名称>键盘</名称>
    <数量>2</数量>
  </商品>
  <商品>
    <名称>鼠标</名称>
    <数量>1</数量>
  </商品>
  <优惠券></优惠券>
  <扩展></扩展>
</root>

JSON 转 XML 何时停止

工具不会为了让 XML 成立而改键名或丢数据,而是不输出 XML,并显示第一个无法转换的位置:

  • {"2026年": "Q1"} 得到 无法转换为 XML: $["2026年"]:该名称不能用作 XML 元素名。 XML 名称不能以数字开头,也不能包含空格;含 : 的名称同样拒绝,因为前缀需要命名空间声明,而这种映射写不出声明。

  • {"坐标": [[116.4, 39.9], [121.5, 31.2]]} 得到 无法转换为 XML: $["坐标"][0]:空数组或嵌套数组无法用重复 XML 元素表示。 重复的元素无法标出内层数组在哪里结束。

  • {"标签": []} 得到 无法转换为 XML: $["标签"]:空数组或嵌套数组无法用重复 XML 元素表示。 空数组不会留下任何元素。

XML 转 JSON

<响应>
  <状态>成功</状态>
  <记录>
    <姓名>李四</姓名>
    <金额>88.50</金额>
  </记录>
  <记录>
    <姓名>王五</姓名>
    <金额>12.00</金额>
  </记录>
</响应>

得到(开启格式化输出):

{
  "响应": {
    "状态": "成功",
    "记录": [
      {
        "姓名": "李四",
        "金额": "88.50"
      },
      {
        "姓名": "王五",
        "金额": "12.00"
      }
    ]
  }
}

两个 记录 合并为数组;88.50 是字符串,末尾的 0 保留。

XML 转 JSON 何时停止

  • <响应><记录 id="7">…</记录></响应> 得到 无法转换为 JSON: /响应/记录[1]/@id:当前 JSON 映射无法表示 XML 属性。 把属性值改写成子元素后再转换。

  • <说明>请在 <b>3 日内</b> 付款</说明> 得到 无法转换为 JSON: /说明:当前 JSON 映射无法表示文本与子元素混排。

路径中的序号按同名元素从 1 开始计数,记录[2] 是父元素下的第二个 记录。

限制

  • XML 转 JSON 的值都是字符串。XML 没有数字和布尔类型,<数量>2</数量> 变成 “2”。空元素变成 "",所以 JSON 的 null 和 {} 往返一次后都是 ""。
  • 一个子元素和多个子元素的结构不同。只有一个 记录 时得到对象,两个以上得到数组,读取 JSON 的代码要两种都处理。
  • 叶子元素的文本原样保留,包括首尾的空格和换行;只有子元素之间的空白会被忽略。注释和处理指令跳过。
  • 属性、命名空间声明和混排文本会让转换停止(见上文),工具不提供 @id 这类属性映射。
  • XML 语法错误的提示来自浏览器的解析器,Chrome、Firefox、Safari 的措辞不同。只想缩进或压缩 XML 时,用 XML 格式化工具。

JSON 与 XML

JSON 是 REST API 和 Web 服务的常用数据格式,简洁、可读、各语言原生支持。 XML 在企业系统、SOAP API、配置文件(Maven、Spring)和文档格式(SVG、XHTML、RSS)中仍被广泛使用。 对接两种格式的系统时,可以用本工具先看一份数据在另一种格式里的样子,并找出无法对应的结构。

FAQ

JSON 转 XML 的规则是什么?

对象的每个键变为同名子元素,值变为文本;数组生成多个同名元素;null 和空对象生成空元素。键名不是合法 XML 名称、或者数组为空或嵌套时,工具不输出 XML,并显示第一个问题的路径,例如 $["m"][0]。

XML 转 JSON 的规则是什么?

工具用浏览器内置的 DOMParser 解析 XML。叶子元素变为字符串,子元素变为对象的键,同名兄弟元素合并为数组,根元素名作为顶层键。子元素之间的空白忽略,注释跳过,CDATA 按文本处理。

根元素名有什么用?

XML 需要一个根元素包裹全部内容。JSON 转 XML 时使用这个名称(默认 root),它必须是合法的 XML 名称,例如 "123 data" 会让转换停止。XML 转 JSON 时不使用该选项,以 XML 实际的根元素名为准。

支持 XML 属性吗?

不支持,但也不会悄悄丢掉。XML 转 JSON 遇到第一个属性就停止并给出位置,例如 /catalog/book[1]/@id。命名空间声明(xmlns、xmlns:x)同样是属性。需要转换时,先把属性改写成子元素。JSON 转 XML 不会生成属性。

我的数据会上传到服务器吗?

不会。所有转换都在浏览器中完成,数据不会离开你的设备。