实用工具
输入
结果
结果会显示在这里。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在线工具