XML转JSON

这个工具做什么

把 XML 报文转成 JSON 对象, 方便用 JSON 的思路看层级, 比对字段, 或者贴进代码里当测试数据. 输入即转换(粘贴后自动出结果, 也可以点"转换"), 只支持 XML → JSON 这一个方向.

输入: <order id="A001"><item>book</item><item>pen</item><total>35.5</total><note/></order>
输出:
{
    "order": {
        "item": ["book", "pen"],
        "total": "35.5",
        "note": null,
        "@attributes": {"id": "A001"}
    }
}

转换规则

上面这个结果里已经包含了四条主要规则, 按实测行为写:

  • 元素变键: 子元素形成嵌套对象;
  • 纯文本元素变字符串值: 数字也是字符串, <total>35.5</total> 得到 "35.5" 而不是 35.5;
  • 同名兄弟元素收成数组: 两个 <item> 变成 ["book", "pen"], 只有一个时仍保持对象或字符串, 所以同一段报文里字段类型可能不统一;
  • 属性放进 @attributes; 空元素 <note/> 变成 null; CDATA 里的内容当普通文本保留.

最容易踩的坑: 属性会被丢掉

只有当元素还有子元素时, 它的属性才会以 @attributes 出现在对象里. 两种情况下属性直接消失:

  • 元素只有文本: <a k="1" j="2">txt</a> → {"a": "txt"}, k, j 全丢;
  • 元素出现在同名数组里: <a k="1">t1</a><a>t2</a> → ["t1", "t2"], 属性同样丢弃.

所以别把这里的结果当成 XML 的无损表示: 属性承载信息的报文(比如 <price currency="CNY">12</price>)要核对原始 XML, 或者先用XML 格式化看原样.

什么情况会用到

  • 对接 SOAP / 老接口时快速确认"服务端到底解析出了什么";
  • 写单测时需要一份和报文等价的 JSON 断言数据;
  • 把 XML 字段结构映射到 Java POJO, 数仓表字段前先摊平成 JSON 看层级;
  • 跟另一份 JSON 响应做字段级 diff(用 JSON 格式化工具比直接比对两种格式快).

常见问题

为什么我的字段一会儿是对象一会儿是数组?

这是 XML 到 JSON 的通病, 不是本页的 bug: XML 里"重复元素"和"单个元素"没有类型区别, 转换只能按出现次数决定. 同一份 schema 的报文转两次可能得到两种 JSON 结构, 写代码解析时不能假定类型稳定. 这也是各类 XML↔JSON 库的共同问题, 严格的库会提供"按 schema 强制数组长短"的选项.

数字, 布尔为什么都带引号?

XML 里所有值本质都是字符串, 转换时不做类型推断, 因此 35.5, true 都会变成字符串. 要参与计算或写回接口时, 需要自己转换类型.

为什么文本里的换行变成了空格?

提交前会把整段文本的换行和制表符统一替换成空格, 避免排版影响解析. 如果你的字段值本身带换行(比如多行备注, 地址), 转出来的 JSON 里换行会不见, 这部分要以原文为准.

支持 JSON 转 XML 吗?

不支持, 本页只做单向. 反方向建议用代码里的库(Java 的 Jackson XML, XStream), 它们能按你的字段名控制属性还是子元素 -- 在线工具无法表达这种映射选择.

内容会被上传吗?

会, 转换在服务端完成, XML 作为请求参数发送到接口, 只用于这一次转换, 页面没有账号体系也不会展示给其他访问者. 含身份证, 卡号, 密钥的报文请先脱敏.

相关工具