XML转JSON转换器

将XML数据转换为JSON。可以把老旧的XML API响应、SOAP报文或RSS/Atom订阅源转换为JSON——属性归入@attributes、文本归入#text、重复元素变为数组——全部在浏览器中完成。

使用提示

  • 带有属性的元素会被归入 `@attributes` 对象中,与元素本身的文本或子元素分开存放。
  • 当一个元素同时包含属性与子元素或文本时,文本部分会存入 `#text` 键,不会与属性值混淆。
  • 同名的兄弟元素多次出现时会自动合并为数组:3个 `` 标签会变成含3个元素的数组,只有1个时则保持为普通对象。
  • 不含属性、文本、子元素的空元素(例如 ``)会被转换为 `null`。
  • `xmlns` 等命名空间前缀不会被拆分,元素仍以 `ns:tag` 这样的完整名称作为键。

常见问题

每个元素的属性会被归入 `@attributes` 键下的对象中。例如 `` 会转换为 `{"@attributes": {"category": "fiction"}, ...}`,与元素本身的值(文本或子元素)分开存放,不会混淆。

当同一父元素下存在多个同名的兄弟元素时,会自动合并为数组。例如存在两个 `` 标签,转换后 `book` 键的值就是一个含2个元素的数组;只有一个时则保持为普通对象。

最常见的原因是结束标签缺失或名称不匹配(闭合标签与开始标签名称不同)。此外XML要求只能有一个根元素,如果像 `......` 这样在顶层并列多个元素也会导致转换失败。

本工具仅支持XML转JSON这一个方向。如果需要单独格式化或校验JSON、XML,请使用本站的其他格式化工具。

命名空间前缀不会被拆分,元素仍以 `ns:tag` 这样的形式作为键名。由于不会解析命名空间(即前缀与URI的映射关系),使用复杂命名空间的XML转换结果可能与预期不完全一致。
ツールくん

闲话 ― 为什么XML与JSON之间没有唯一的"标准答案"

与CSV转JSON那种简单的"一行对应一个对象"不同,XML与JSON之间并不存在唯一公认的转换规则。XML中属性、文本节点、子元素可以同时存在于一个元素里,而JSON只有简单的键值对,因此转换时必须做出某种取舍。xml2json、xml-js、org.json等主流实现在如何表示属性、文本与子元素并存时如何取舍等问题上,各自采用了不同的规则。

尽管如此,开发者仍然经常会遇到XML。基于SOAP的Web API、金融/政务/医疗行业中历史悠久的系统间对接、RSS/Atom订阅源、Android的布局文件等,都是XML至今仍作为标准格式使用的领域。将从这些遗留系统中取得的数据,接入现代化的、只认JSON的工具链(用jq处理,或在JavaScript中作为普通对象操作)——这样的需求始终存在。

本工具采用的 `@attributes`/`#text` 规则,是一种常见且实用的选择,而非大量使用特殊符号的极端记法。不带属性的叶子元素会直接转换为其文本值,这样简单的配置值或RSS标题之类的常见场景就能得到易读的普通JSON;而带有属性的元素则会被明确区分出来,只要看一眼转换结果就能知道哪些值原本是属性。