实用工具

XML 与 JSON 互转

把 RSS、站点地图、SOAP 响应、Maven POM 等 XML 转成 JSON,也能转回去,属性用你选的前缀保留。

浏览器本地运行数据格式3138
免费

输入

0 B

结果

结果会显示在这里。

RSS 和 Atom 订阅源、站点地图、SOAP 服务、Maven 构建至今仍在用 XML,而处理它们的代码大多更想要 JSON。这里用 fast-xml-parser 双向转换,它是 Node 生态里广泛使用、没有任何依赖的 XML 解析器。转换前会先校验文档,少了一个闭合标签会直接报出行号和列号,而不是给你半份结果。属性会放在一个前缀下(默认 @_),不会和同名子元素冲突;文本默认保持字符串,除非你要求把数字和布尔值解析出来。

它是怎么工作的

  • 重复出现的同级元素(比如 RSS 频道里的多个 <item>)会变成 JSON 数组,只有一个时保持对象。
  • 同时带属性和文本的元素,文本放在 #text 下,和加了前缀的属性并列。
  • 默认不做类型转换,所以 <version>2.10</version> 仍然是 "2.10",不会变成数字 2.1。
  • 转成 XML 时,JSON 必须恰好有一个顶层键,它会成为根元素。

你的数据去了哪里

哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。

本工具免费且无需登录,运行结果只存在于你当前的页面里,不会被保存到任何地方。

它要花多少

本工具完全免费,不需要登录,也不消耗积分。

常见问题

为什么一个 <item> 是对象,两个就成了数组?
XML 本身并不说明一个元素能否重复,只有 schema 才会规定。只有一个 <item> 时,转换器没有理由生成数组。如果你的代码每次都期待数组,转换后自己统一一下,比如用 [].concat(channel.item)。
@_ 前缀是什么意思?
它标记这个键来自属性而不是子元素,所以 <guid isPermaLink="true"> 会变成 "@_isPermaLink": "true"。可以换成 @ 或 $,和你代码里已有的约定保持一致。JSON 转 XML 时也靠同一个前缀判断哪些键要写回成属性。
命名空间、注释和 CDATA 怎么处理?
命名空间前缀会作为名字的一部分保留,atom:link 还是 atom:link。注释会被丢弃,CDATA 段按普通文本读取。XML 声明和处理指令会被跳过,因为它们不携带数据。
粘贴来路不明的 XML 安全吗?
安全。fast-xml-parser 从不去获取外部实体或 DTD,经典的 XXE 攻击无从下手;整个转换都在本页面里完成,文档不会被发送到任何地方。

背后的开源项目

本工具运行在 NaturalIntelligence/fast-xml-parser 之上,以 MIT 许可发布。如果你需要在自己的程序里实现同样的能力,直接用这个库。

NaturalIntelligence/fast-xml-parser

也常被称作

  • xml转json
  • json转xml
  • xml在线转换
  • rss转json
  • xml解析
  • xml转json在线工具