XML 转 JSON

免费在线 XML 转 JSON 工具,基于浏览器 DOMParser 解析 XML 并自动转换为标准 JSON 对象。XML 属性直接映射为字段,重复元素自动合并为数组,元素文本存入 value 字段;同时支持 JSON 和 YAML 双格式输出、prettyPrint 格式化和 XML 错误自修复,纯浏览器本地处理。

相关推荐

关于 XML 转 JSON:把 XML 数据自动转换为标准 JSON 对象

XML 转 JSON 是把 XML(eXtensible Markup Language)格式的数据(SOAP 报文、RSS 订阅、配置文件)转换为 JSON(JavaScript Object Notation)对象的过程。XML 是企业系统、SOAP Web Service、配置文件、Office 文档的传统数据格式,JSON 是现代 Web API、JavaScript、NoSQL 数据库的事实标准。两种格式各有优势:XML 严格自描述、广泛支持命名空间和 schema 验证;JSON 简洁易解析、天然适配 JavaScript。开发中常需要把 XML 报文转为 JSON 供现代前端或微服务使用,本工具就是为了自动化这个过程。

本工具的核心是使用浏览器原生 DOMParser 解析 XML,并自动遍历 DOM 树生成 JSON 对象。DOMParser 是浏览器内置的 XML 解析器,遵循 W3C DOM 标准,支持 XML 命名空间、CDATA、注释、属性等所有 XML 1.0 特性。基于 DOM 解析的优势是零依赖、性能好、标准合规。

转换映射规则非常直观:每个 XML 元素转为 JSON 对象,元素的属性直接转为对象的字段(不使用 @ 前缀,避免常见的混乱命名约定);元素的文本内容存入 value 字段;同名重复元素自动合并为数组。例如 <bookstore><book id="1"><title>Great Gatsby</title></book><book id="2"><title>Brief History</title></book></bookstore> 会被转为 {bookstore: {book: [{id: "1", title: {value: "Great Gatsby"}}, {id: "2", title: {value: "Brief History"}}]}}。

属性映射采用无前缀的直映模式是本工具的关键设计选择。许多 XML 转换工具会使用 @attribute、#text 等特殊前缀来区分属性和文本,这虽然准确但产生的 JSON 结构较为奇怪,难以在 JavaScript 中直接使用。本工具的属性直接映射让生成的 JSON 更接近真实业务数据模型,开发者可以直接在 TypeScript interface 中定义对应类型。

重复元素的数组化是 XML 转 JSON 的另一个关键设计。XML 没有原生的数组概念,需要通过重复元素(如多个 <item>)表示列表数据。本工具自动检测同一父元素下的同名重复标签并合并为数组,符合 JSON 的列表语义,避免数据丢失或需要手动合并。

双格式输出(JSON + YAML)是本工具的差异化设计。YAML 是另一种流行的数据序列化格式,在 Kubernetes、Docker Compose、Ansible、GitHub Actions 等配置场景广泛使用。工具内置简易 YAML 转换器,支持标准的 2 空格缩进、列表前缀 -、键值对 : 分隔。点击 JSON/YAML 切换按钮即可在两种格式间实时切换。

XML 错误自修复(tryFixXML)提升了工具的容错性。现实中用户输入的 XML 经常缺少 XML 声明(<?xml version="1.0"?>),或者自闭合标签(如 <br>、<img>)使用了 HTML 风格的 <br> 而不是 XML 风格的 <br />。工具会自动添加 XML 声明、补全自闭合标签的 /,使更多不规范的 XML 能被 DOMParser 正确解析。

XML 格式化与压缩(formatXML/compressXML)基于 xml-formatter 库。prettyPrint 模式输出 2 空格缩进、保留换行的可读 XML;压缩模式输出无空白、单行的紧凑 XML 适合网络传输。开发人员可以直接用工具压缩 XML 后存储到数据库,节省 30-50% 存储空间。

实时自动转换是工具的实用功能。输入 XML 后 500ms 防抖自动触发转换,配合 6 个键盘快捷键(macOS ⇧⌘+F/C/T/O/D/K),用户可以快速完成格式化、压缩、转换、上传、下载、清空等常用操作,无需鼠标点击。

纯浏览器本地处理是本工具的核心架构。所有 XML 解析、DOM 遍历、JSON 序列化、YAML 转换都在浏览器 JavaScript 中执行,DOMParser 由浏览器原生提供(无需打包 XML 解析库),xml-formatter 是轻量级 npm 包(不到 30KB)。原始 XML 数据不上传到服务器,敏感 SOAP 报文(如包含订单信息、用户数据)可在本地安全处理。

适用场景

  • 对接支付网关、ERP、CRM 等只返回 XML 响应的遗留企业 API 时,把 XML 报文快速转为 JSON 供现代前端或 Node.js 后端使用。
  • 解析 RSS / Atom 订阅源为 JSON,方便在 Web 前端展示、聚合到统一 feed 阅读器,或导入数据库。
  • 读取 Spring、Tomcat、Apache 等 Java 应用的 XML 配置文件(web.xml、applicationContext.xml),转为 JSON 后用 jq 查询或导入其他工具。
  • 把 SOAP 1.1/1.2 协议的 XML 响应转为 JSON,配合 Node.js 的 jsonwebtoken、lodash 等库进行后续处理。
  • 解析 Maven 的 pom.xml、Ant 的 build.xml 等构建脚本为 JSON,用作项目元数据可视化、依赖分析等。
  • 把 RSS feed、Sitemap XML、Atom 订阅源转为 JSON 格式存储到 Elasticsearch、MongoDB 等现代数据库。
  • 对接医疗、金融行业的 HL7、ISO 20022 等基于 XML 的行业标准数据格式时,把 XML 报文转为 JSON 供现代微服务处理。
  • 把 Google Merchant Center、Sitemap.org 等 SEO 相关的 XML 文件(sitemap.xml、robots.xml)转为 JSON 供爬虫或分析工具使用。
  • 接口联调时把第三方接口返回的 XML 用本工具转为 JSON,再复制到 Postman、Apifox 的 Body 里继续走 JSON 化的接口验证流程。
  • 前端工程师把后端 XML 接口的响应粘进工具转成 JSON 后,用 JSONPath 或 JSON 格式化工具反查指定字段,避免在 XML 里逐层找节点。
  • 测试工程师把录制下来的 SOAP 请求/响应 XML 报文转为 JSON 后,作为单元测试的 expected fixture 写到 Jest、Mocha 用例里。
  • 运维排查线上问题时,把 Nginx、Apache 或应用日志里截到的 XML 报文片段贴进工具转成 JSON,便于对比正常与异常两次返回的字段差异。
  • 把数据库导出的 XML dump(如 MySQL 的 mysqldump --xml 模式、PostgreSQL 的 COPY TO XML)转成 JSON,再借助 JSON 转 CSV 工具导入 Excel 做数据分析。
  • 做 Mock 数据时,把手工编写的 XML 接口样例先用本工具转 JSON,再通过 JSON 转 TypeScript 类型工具直接生成前端 interface 定义。
  • 数据分析师处理企业 ERP、CRM 导出的 XML 报表时,先把 XML 转成 JSON 再用 JSONPath 过滤关键字段,最后导出 CSV 给业务团队做表。
  • 把第三方 SDK 返回的 Svg、MathML、UBL 等带命名空间的 XML 转成 JSON 后,再用 JSON 格式化工具压缩或美化,作为前端组件 props 注入使用。
  • 对接老旧 OA、工单系统导出的不规范 XML(缺闭合标签、没声明头)时,借助工具自带的 tryFixXML 自动修复后再转 JSON,避免反复排查脏数据。
  • 把 chatGPT、客服系统导出的聊天记录 XML 转成 JSON,再交给 JSON 转 YAML / TOML 工具,生成可供文档站使用的配置化样例。
  • 把 XML 处理成 JSON 后,再用 JSON 转 SQL 工具批量生成 INSERT 语句,把行业 XML 数据(HL7、ISO 20022)写入关系型数据库。
  • 运维把 K8s、Istio、Spring Cloud Config 等平台的 YAML/XML 配置先用本工具预览转 JSON 后的结构,再决定是否改用 JSON 配置文件提交。

使用方法

  1. 在左侧输入框粘贴 XML 内容,或点击「上传」按钮选择 .xml/.txt 文件,或点击「示例」加载内置的 bookstore 示例。
  2. 工具会自动转换(输入后 500ms 防抖);在右侧查看转换后的 JSON 或 YAML,CodeMirror 语法高亮便于阅读。
  3. 点击右侧工具栏的 JSON / YAML 按钮实时切换输出格式。也可以使用「格式化」(⇧⌘+F)或「压缩」(⇧⌘+C)按钮调整 XML 输入的格式。
  4. 点击「复制」将 JSON/YAML 复制到剪贴板,或点击「下载」保存为对应扩展名的文件(output.json / output.yaml / output.xml)。
  5. 如需修复 XML 语法错误,点击错误提示旁的「修复」按钮(或在工具栏的「示例」旁的下拉菜单),工具会调用 tryFixXML 自动添加 XML 声明和补全自闭合标签。
  6. 将 JSON 粘贴到目标代码中(如 TypeScript interface 定义、API 响应类型等),或导入到后端服务进行进一步处理。

功能特点

  • 智能 DOM 树解析:基于浏览器原生 DOMParser 解析 XML,自动遍历节点树生成标准 JSON 对象,零依赖。
  • 属性直接映射:XML 属性(如 id="1"、category="fiction")直接转为 JSON 对象的普通字段,无需 @ 前缀。
  • 重复元素数组化:同名重复 XML 元素自动合并为 JSON 数组({book: [{...}, {...}]}),符合常见数据结构约定。
  • 文本节点提取:元素文本内容自动存入 value 字段,与属性和子元素并列保留。
  • 双格式输出:一键切换 JSON(prettyPrint 2 空格缩进)和 YAML(2 空格缩进、列表前缀 -)双格式,适配不同应用场景。
  • XML 错误自修复:内置 tryFixXML 修复函数,自动添加缺失的 XML 声明,补全 br/hr/img 等自闭合标签。
  • XML 格式化压缩:使用 xml-formatter 库支持 prettyPrint 美化输出和 minify 压缩输出(2 空格缩进或无空白)。
  • 实时自动转换:输入 XML 后 500ms 防抖自动转换,无需手动点击,输出实时同步更新。
  • JSON/XML 双重高亮:左侧 CodeMirror XML 语法高亮,右侧根据格式切换 JSON 或 YAML 高亮。
  • 完整快捷键体系:6 个常用快捷键(格式/压缩/转换/上传/下载/清空),支持 macOS 和 Windows/Linux。
  • 复制与下载:一键复制到剪贴板,或下载为标准 output.json/output.yaml/output.xml 文件(按当前格式自动选择扩展名)。
  • 纯浏览器本地处理:所有 XML 解析、DOM 遍历、JSON 序列化都在浏览器 JavaScript 中完成,原始数据不上传,DOMParser 由浏览器原生提供。

常见问题

怎么把 XML 转成 JSON 格式?

把 XML 内容粘贴到左侧输入框,工具会使用浏览器原生 DOMParser 解析 XML,并将 DOM 树自动转换为标准 JSON 对象。根节点用 { [tagName]: {...} } 包装,属性映射为普通字段(无 @ 前缀),元素文本存入 value 字段,重复同名元素自动合并为数组。500ms 后自动转换,无需手动点击。

XML 中的属性和文本节点会如何转换?

本工具采用直观的映射模式:XML 属性直接映射为 JSON 对象的普通字段(例如 <book id="1"> 转为 {id: "1", ...}),不再使用 @ 前缀;元素的文本内容存入 value 字段(如 <title>Great Gatsby</title> 转为 {value: "Great Gatsby"})。属性 + 文本共存时,两者并列在同一对象中。

XML 中多个重复的同名元素会自动变成 JSON 数组吗?

会的。工具会自动检测同一父元素下的多个重复元素标签(如 <bookstore> 下的 3 个 <book>),并将它们合并为 JSON 数组。例如 <bookstore><book>...</book><book>...</book></bookstore> 会变成 {bookstore: {book: [{...}, {...}]}}。这种约定匹配 XML 处理中最常见的数据结构。

纯文本节点会如何处理?

当 XML 元素没有属性只有文本内容时,工具直接返回文本字符串(如 <name>Alice</name> 转为 "Alice")。当元素同时有属性和文本时,属性和文本并列在同一对象中({attr: "...", value: "..."})。当元素有子元素时,子元素作为对象字段,文本内容合并为 value 字段。

遇到格式不规范(如缺少闭合标签)的 XML 能转换吗?

可以。工具内置 tryFixXML 修复函数,会自动添加缺失的 XML 声明(<?xml version="1.0" encoding="UTF-8"?>),并自动为 br、hr、img 等常见的自闭合标签补全 /。这一设计显著提升了对老旧系统、不规范第三方接口的兼容性。

支持哪些 XML 文件类型?

支持 .xml 和 .txt 文件(UTF-8 编码)。点击「上传」按钮选择本地文件,工具通过浏览器原生 FileReader API 读取,不会上传到服务器。上传成功后内容自动填入输入框并触发自动转换。

可以同时输出 JSON 和 YAML 吗?

可以。工具支持 JSON 和 YAML 双格式输出。点击右侧工具栏的 JSON/YAML 切换按钮即可实时切换输出格式。JSON 格式带 2 空格 prettyPrint;YAML 格式采用标准的 2 空格缩进、列表前缀 -、键值对 : 分隔,可直接用于 Kubernetes、Docker Compose、Ansible 等配置场景。

下载的文件名是什么?

根据当前输出格式自动选择扩展名:选择 JSON 格式时下载 output.json,选择 YAML 格式时下载 output.yaml,输入但未转换时下载 output.xml(保持原格式)。所有文件均为 UTF-8 编码,可被对应格式的解析器直接读取。

键盘快捷键有哪些?

工具支持以下快捷键:macOS 用户 ⇧⌘+F 格式化、⇧⌘+C 压缩、⇧⌘+T 转换、⇧⌘+O 上传、⇧⌘+D 下载、⇧⌘+K 清空;Windows/Linux 用户用 Ctrl 替代 ⌘。共 6 个快捷键覆盖完整工作流。

支持 XML 命名空间(namespace)吗?

本工具基于 DOMParser 解析 XML,原生支持 XML 命名空间(xmlns)。命名空间前缀会作为元素名称的一部分保留在 JSON 中,例如 <svg:circle> 会变成 {svg:circle: {...}}。如果要访问跨命名空间的元素,需要在 JSON 解析端通过命名空间前缀识别。

支持 CDATA 段吗?

支持。CDATA 段(<![CDATA[...]]>)中的内容会被 DOMParser 自动合并到元素的 textContent 中,工具会像处理普通文本节点一样将其提取到 JSON 的 value 字段。但因为 CDATA 是 XML 节点类型而非字符串,原 CDATA 与普通文本在 JSON 输出中无法区分。

支持哪些输入文件大小?

理论上无硬性上限,受浏览器内存限制。一般 1-2 MB 以内的 XML 可流畅处理;更大文件可能因 DOMParser 内存占用较大而变慢。如果处理大型 SOAP 报文或 RSS feed 出现卡顿,建议先在本地 XML 编辑器中精简或拆分。

故障排查

JSON 解析报 'unclosed token' 错误?

原因通常是 XML 缺少闭合标签、属性引号未成对、或特殊字符未转义。点击错误提示旁的「修复」按钮调用 tryFixXML 自动添加 XML 声明、补全自闭合标签。如果仍无法解析,手动检查 XML 结构或在浏览器开发者工具中用 document.documentElement.outerHTML 查看解析结果。

属性的顺序在 JSON 中与 XML 中不一致?

JSON 标准不保证属性顺序,工具按元素属性的源代码顺序映射。如果业务对顺序敏感,建议在解析后的 JSON 中使用 Lodash 的 toPairs 或类似工具重建为有序数组。但绝大多数 JavaScript 引擎(V8、SpiderMonkey)会按插入顺序保留字符串键。

同名元素只有一个时不会变成数组,怎么处理?

工具当前仅在检测到同名重复元素时转为数组;如果只有一个同名元素,工具会保留为单个对象。如果你需要强制数组化(即使只有 1 个元素),可以先转换后用 lodash 的 castArray 包装:[result].flat() 或用 JSON Schema 校验强制数组。

如何保留 XML 属性中的特殊字符(如 <、&)?

DOMParser 会自动反转义属性值,工具会保留反转义后的内容。如果原始 XML 中写的是 &lt;,转换后 JSON 中的值是 <。这是 XML 标准行为,符合用户预期。如需保留原始转义形式,可使用 xml-formatter 库或自实现的 XML tokenizer 替代 DOMParser。

为什么 YAML 输出没有类型信息?

YAML 格式本身支持类型(如 12 是 number,true 是 boolean,null 是 null),但本工具的简易 YAML 转换器将所有值序列化为字符串。如果需要保留类型,可使用 js-yaml 等成熟的 YAML 库,或在解析端通过 JSON Schema 验证后再强制类型。

如何处理包含 XML 处理指令(PI)的输入?

DOMParser 默认将 XML 处理指令(如 <?xml-stylesheet ...?>)保留为 document.firstChild 的 ProcessingInstruction 节点。本工具目前只遍历 Element 节点,处理指令会被忽略。如需保留,可在使用前手动提取 document.firstChild.nodeValue。

下载的 .json 文件用什么打开?

下载文件 output.json 是 UTF-8 编码的标准 JSON 文件,可用任何文本编辑器(VS Code、Sublime、Notepad++)或专业 JSON 工具(jq、JSDoc)打开。可直接拖入浏览器查看格式化结构。JavaScript、Python、Node.js、Java、Go 等几乎所有编程语言都内置 JSON 解析器。

术语表

XML (eXtensible Markup Language)
可扩展标记语言,由 W3C 于 1998 年制定。使用尖括号标签描述数据结构和内容,支持命名空间、Schema 验证、XSLT 转换。是 SOAP Web Service、Office Open XML、RSS、Atom 等的标准格式。
JSON (JavaScript Object Notation)
轻量级数据交换格式,基于 JavaScript 对象语法但独立于编程语言。支持对象 ({}), 数组 ([]), 字符串, 数字, 布尔, null 六种基本类型。是现代 Web API、NoSQL 数据库、JavaScript 生态的事实标准。
DOMParser
浏览器原生 API(W3C DOM 标准),将 XML 或 HTML 字符串解析为 DOM 树。所有现代浏览器(Chrome、Firefox、Safari、Edge)都内置支持,无需引入第三方库。基于 DOM 树可以方便地遍历、查询、修改 XML 内容。
xml-formatter
轻量级 JavaScript 库(不到 30KB),用于格式化(prettyPrint)和压缩(minify)XML 文档。支持自定义缩进、换行符、collapseContent 等选项。本工具使用它提供 XML 格式化和压缩功能。
属性映射(attribute mapping)
XML 元素属性转为 JSON 对象字段的映射方式。本工具采用直映模式:<book id="1"> 转为 {id: "1"},不使用 @ 前缀。生成更干净的 JSON 结构,TypeScript interface 定义更简单。
重复元素数组化
XML 中同名重复元素(如多个 <item>)自动合并为 JSON 数组。这是 XML 转 JSON 的关键设计决策,符合 JSON 的列表语义,避免数据丢失。
value 字段
本工具约定的 XML 元素文本内容字段名。元素 <title>Great Gatsby</title> 转为 {value: "Great Gatsby"}。如果元素同时有属性和文本,属性和 value 并列在同一对象中。
YAML (YAML Ain't Markup Language)
人类友好的数据序列化格式,广泛用于 Kubernetes、Docker Compose、Ansible、GitHub Actions 等配置文件。本工具支持简单 YAML 输出,2 空格缩进、列表前缀 -、键值对 : 分隔。
SOAP (Simple Object Access Protocol)
基于 XML 的 Web 服务通信协议。SOAP 消息由 SOAP envelope(XML 命名空间)包裹,内含 header 和 body(XML payload)。本工具可解析 SOAP 消息为 JSON 供现代 JavaScript 服务使用。
RSS / Atom feed
基于 XML 的内容订阅格式。RSS 2.0 格式以 <rss><channel><item> 结构组织内容,Atom 使用 <feed><entry> 结构。本工具将 RSS/Atom 转为 JSON 数组便于在前端展示或聚合到数据库。
XML 命名空间(namespace)
通过 xmlns 属性避免元素名称冲突的机制,格式如 xmlns:prefix="uri"。DOMParser 原生支持命名空间,命名空间前缀会作为元素名称的一部分保留在 JSON 中。
CDATA 段
XML 中的特殊语法 <![CDATA[...]]>,用于在元素内嵌入含特殊字符(如 <、>、&)的文本而无需转义。DOMParser 会将 CDATA 内容合并到元素的 textContent 中,工具按普通文本处理。
tryFixXML
本工具内置的 XML 修复函数,会自动添加缺失的 XML 声明(<?xml version="1.0" encoding="UTF-8"?>),并为 br、hr、img 等常见自闭合标签补全 /。处理老旧系统或不规范第三方接口的脏数据。
prettyPrint
xml-formatter 库的输出模式。启用后生成的 XML 自动添加缩进和换行(如 2 空格缩进),可读性高;禁用时输出紧凑无空白(minify)。

XML 元素到 JSON 字段的映射规则

本工具基于 DOMParser 解析的转换映射规则:

XML 结构XML 示例JSON 输出映射规则
element with attrs<book id="1" category="fiction"/>{"id": "1", "category": "fiction"}属性直接映射为对象字段(无 @ 前缀)
element with text<title>Great Gatsby</title>{"value": "Great Gatsby"}元素文本内容存入 value 字段
attrs + text<price currency="USD">12.99</price>{"currency": "USD", "value": "12.99"}属性和文本并列在同一对象
no attrs, no text<book id="1"/>{"id": "1"}只有属性,无 value 字段
nested elements<book><title>Gatsby</title></book>{"title": {"value": "Gatsby"}}子元素转为对象字段
repeated elements<books><book/><book/></books>{"book": [{}, {}]}同名重复元素自动合并为数组
root element<bookstore>...</bookstore>{"bookstore": {...}}根节点用 { [tagName]: ... } 包装
namespace prefix<svg:circle/>{"svg:circle": {...}}DOMParser 原生支持命名空间

JSON vs YAML 输出格式对比

本工具支持的两种输出格式的特点和适用场景:

维度JSONYAML说明
语法{ } : [ ] 简洁缩进 + - 列表JSON 更简洁,YAML 更易读
数据类型原生 number/bool/null原生 number/bool/null两者都保留类型
缩进2 空格缩进2 空格缩进本工具统一使用 2 空格
数组[1, 2, 3]- 1\n- 2\n- 3JSON 用方括号,YAML 用破折号
注释不支持(标准)# 注释YAML 支持注释
可读性中等(括号噪音)高(接近自然语言)YAML 可读性更好
使用场景REST API、前后端K8s、Docker、CI/CDWeb 用 JSON,配置用 YAML

XML 与 JSON 格式对比

两种数据格式在不同维度上的对比,帮助理解何时选择 XML 或 JSON:

维度XMLJSON说明
语法< > </> 冗长{ } : [ ] 简洁JSON 语法更简洁,XML 标签更冗长但可读性高
数据类型全是字符串原生 number/bool/nullJSON 保留类型,XML 需靠 schema 验证类型
数组重复元素 <i>1</i><i>2</i>原生 [1,2,3]JSON 数组简洁,XML 数组依赖命名约定
注释<!-- 注释 -->不支持(标准)XML 支持注释,JSON 标准不支持
命名空间xmlns 支持XML 避免大型文档的命名冲突
Schema 验证XSD / DTDJSON Schema两者都有成熟的 schema 验证机制
解析性能较慢(标签开销)更快(~3-5x)JSON 解析更简单,XML 解析更复杂
使用场景SOAP、企业、OfficeREST API、前后端现代 Web 用 JSON,传统企业用 XML

Privacy & Security

本 XML 转 JSON 工具所有操作完全在你的浏览器本地完成:XML 解析(基于浏览器原生 DOMParser)、DOM 树遍历、JSON 序列化、YAML 转换全部通过浏览器 JavaScript 在客户端执行,xml-formatter 是唯一外部依赖(小于 30KB 的 npm 包)。原始 XML 数据不上传到任何服务器。文件上传使用浏览器原生 FileReader API 直接读取到内存,不经过任何中间服务。不使用 Cookie 追踪,不收集任何用户输入或使用数据。关闭或刷新页面后,所有输入和输出内容自动从内存清除。适合处理含敏感业务数据(订单信息、用户凭证、企业 API 响应)的 XML 报文。

Authoritative References