XML 转 JSON

转换器

用浏览器原生 DOMParser 把 XML 解析为 JSON,保留属性与命名空间,适合把 SOAP 响应、RSS 与 SVG 元数据喂给前端组件,免装解析库。属性与文本会分开保留,重复元素合并为数组以免丢失同名字段。命名空间会连同前缀一起注明,便于判断节点归属。转换结果可一键复制。

输入 → 输出
XML输入
JSON输出

关于 XML 转 JSON

XML 转 JSON 工具基于 DOMParser API 在浏览器本地将 XML 文档解析并转换为 JSON 格式。合理处理 XML 属性(添加 @ 前缀区分属性与子元素)、文本节点(使用 #text 键名)、命名空间前缀和重复元素(自动转为数组)。支持 CDATA 区块、处理指令、注释和 XML 声明的可选保留,可选择是否去除命名空间前缀。转换最值得注意的坑在于「重复元素」:同一个父节点下出现多次的同名子元素,会被收集成数组,而只出现一次时则是普通对象——同一份 XML 在不同数据下可能结构不同,消费端代码要对这两种情况都做好兼容。适用于将 SOAP 接口响应、RSS 订阅源、Atom Feed、Android 布局文件和旧系统 XML 配置迁移为现代 JSON 格式。支持自定义属性前缀符号(默认 @)和文本节点键名(默认 #text)。例如把 <user><id>1</id></user> 转成 {"user":{"id":"1"}},属性与子节点会按规则映射为对象字段。

把 XML 转成 JSON 通常是新旧系统对接的过渡步骤:老接口只提供 XML,新代码只认 JSON。这类转换没有唯一正确答案,因为两种数据模型的差异是根本性的——XML 有属性与文本节点之分、允许重复元素而不需要容器、还支持命名空间,而 JSON 只有对象、数组与标量,映射时必然要做取舍。 常见的映射约定有几种:把属性统一加前缀变成普通键、把文本内容固定映射到某个约定的键名下、把同名重复元素聚合成数组。哪一种更好取决于消费方,关键在于**约定要一致且写进文档**,否则同一个文档在不同转换实现下会得到不同结构,而这类差异往往只在数据出错时才被察觉。 使用要点:转换前先确认目标系统对「单个元素」与「数组」的处理方式——有的实现把只有一个子元素的同名节点映射成标量而非数组,导致消费方在元素数量变化时突然拿到不同类型,这是最经典的一类线上故障,稳妥做法是约定这类字段永远映射为数组。命名空间是另一处高频问题,若转换时直接丢掉前缀,来自不同命名空间的同名元素会被错误合并,排查时应先确认源文档是否真的使用了命名空间。 边界与限制:注释、处理指令与文档类型声明在转换中必然丢失,需要保留的信息应写进数据本身。属性与子元素的语义不同,属性通常表示元信息而子元素表示结构化数据,机械地全部拉平成同级键会丢失这一层次,消费方若依赖该层次就会出错。另外,XML 允许混合内容(同一节点内既有文本又有子元素),JSON 没有对应结构,遇到这类文档必须先决定用带标记的字符串表示还是直接拒绝,而不是让它被静默丢弃。 数据与隐私:需要转换的 XML 常见于企业接口与政务数据,其中可能包含个人信息与业务密钥。本工具在浏览器内完成解析与转换,不上传内容,可离线使用;处理含个人信息的文档前建议先脱敏,并确认转换结果里没有把敏感属性一并展开。

实现原理

反向转换没有唯一答案,因为两种模型差异是根本性的:XML 区分属性与文本节点、允许重复元素而不需要容器、支持命名空间,而 JSON 只有对象、数组与标量。常见约定是属性加前缀、文本映射到固定键名、同名重复元素聚合成数组。必须把约定写进文档,否则同一份文档在不同实现下会得到不同结构。

输入<a id="1">text</a>
输出{"a":{"@id":"1","#text":"text"}}(属性加前缀、文本映射到固定键名)

使用方法

  1. 打开「XML 转 JSON」
  2. 选择源格式与目标格式
  3. 根据需要调整输出选项
  4. 点击「转换」按钮,结果实时显示
  5. 复制或导出结果

使用场景

  • 消费 SOAP 响应 — 把 SOAP 接口返回的 XML 转 JSON,让前端用 JSON.parse 直接处理。
  • 解析 RSS/Atom — 将订阅源的 XML 转成 JSON,方便提取标题、链接、时间等字段。
  • 迁移老系统 — 把遗留系统的 XML 数据转 JSON 后导入新的 JSON 化服务。
  • 配置读取 — 将 XML 配置转 JSON,避免在前端引入笨重的 XML 解析库。
  • 数据分析 — 转成 JSON 后用 jq、JSONPath 等工具做查询和统计。
  • SVG 动态渲染 — 把 SVG 的 XML 标记转成 JS 对象,供 React/Vue 组件动态渲染。

常见问题

XML 属性会丢失吗?

不会。属性通常会映射成带特定前缀(如 @ 或 $)的键,与子元素区分开,确保信息完整。

重复元素怎么处理?

同名的重复子元素会被收集成 JSON 数组;只出现一次的元素则是普通对象,符合直觉,但消费方需对两种情况都兼容。

命名空间会怎样?

命名空间前缀通常会保留在键名中(如 ns:tag)。如果不需要,可在转换后手动清理或使用去前缀选项。

混合内容(文本+子元素)呢?

元素同时含文本和子节点时,文本会放进一个专用键(如 #text),子元素照常映射。

为什么 XML 根节点是数组?

因为 XML 只允许一个根节点而 JSON 数组表达的是多个并列内容,多文档或带包裹结构时会出现数组,可开启单元素降维选项。

想反向转换?

请使用本站的「JSON 转 XML」工具。

同名标签重复出现时变成了数组,单个时是对象,怎么办?

这是 XML→JSON 的经典歧义:JSON 需要事先知道是否为数组。工具按实际出现次数决定类型,导致不同文档结构不一致。消费端统一处理(每次都包一层 []),或在选项里强制「重复标签永远输出数组」。

XML 命名空间前缀(ns:tag)转换后键名带冒号?

工具保留原始标签名(含前缀)作为键,不做命名空间解析,因为解析需要文档头部的 xmlns 声明且语义可能因场景不同。需要去掉前缀时,转换后用正则批量清理,或先在源头声明并使用默认命名空间。

广告