XML转JSON 在线XML转JSON格式工具
XML转JSON工具,XML文档和接口响应转为JSON,支持属性、数组和类型转换,实时校验报错,适合接口开发、数据转换和自动化处理等场景。
更新于 2026-08-26
相关工具
功能特性
- 即时转换:输入即输出,编辑过程中结果实时更新
- 属性转为 @_ 前缀键(如 id="bk101" → "@_id": "bk101"),与 fast-xml-parser 惯例一致
- 重复的同名兄弟元素自动合并为 JSON 数组
- CDATA 段原样保留为纯文本值:无需担心标记转义
- 可选类型转换:数字文本(42、3.14)变为 JSON 数字,"true"/"false" 变为布尔值
- 空元素处理:可选择 <tag/> 转为 "" 或 null
- 缩进可选 2 或 4 空格,输出更易读
- 严格 XML 校验并精确定位错误行列:未闭合标签、非法字符、结构错误一目了然
- 混合文本与子元素的内容放在 #text 键下,不会静默丢失
- 拖拽 .xml 文件或使用文件选择器加载,一键保存为 .json 或复制到剪贴板
- 从容处理深层嵌套文档:多级树、命名空间(xmlns)与处理指令
- 首次加载后支持离线使用
使用方法
- 1把 XML 粘贴到左侧面板,JSON 转换即时完成,无需点击任何转换按钮。
- 2把 .xml 文件(如导出的配置或 API 响应)拖到编辑区即可加载。
- 3转换带属性的文件(如 <book id="bk101">),观察每个属性如何变成 @_ 前缀键。
- 4试试 Book Catalog 示例,看重复的 <book> 元素如何变成 JSON 数组。
- 5用"类型转换"开关:开启时数字文本转为数字,关闭时全部保持字符串。
- 6用"空节点"开关决定 <tag/> 转成 ""(方便往返转换)还是 null。
- 7在缩进选项间切换 2/4 空格,匹配团队的 JSON 风格。
- 8校验失败时左侧行号变红,错误面板会显示具体信息与位置。
- 9点击复制图标把 JSON 粘贴进 JavaScript 代码,或点保存下载 converted.json。
- 10用 Config File 示例直观理解嵌套 XML 树如何映射为嵌套 JSON 对象。
常见问题
如何把 XML 转成 JSON?
把 XML 粘贴到左侧面板,右侧立即显示 JSON 输出。转换器解析 XML 树并重建为 JSON:元素变为对象、重复元素变为数组、属性变为 @_ 前缀键。没有转换按钮,输出随输入实时更新。
为什么我的 XML 属性在 JSON 输出里不见了?
属性没有消失:它们会变成 @_ 前缀的 JSON 键,遵循 fast-xml-parser 惯例。例如 <book id="bk101" category="fiction"> 变成 {"@_id": "bk101", "@_category": "fiction"}。这让属性与子元素在视觉上区分开。如果你用 fast-xml-parser 或 xml2js 消费结果,它们可以直接读取这种结构。
同一个标签出现多次会怎样?
重复的兄弟元素会合并为 JSON 数组。例如 <catalog> 下两个 <book> 元素产生 "catalog": {"book": [...]}。只有一个元素时保持普通对象:这是消费输出时常见的坑,建议在使用前用 schema 规范化。
CDATA 会怎样处理?
CDATA 段会保留为纯文本值。<![CDATA[...]]> 中的内容被原样提取,这对内嵌 HTML 或代码的 XML 特别有用,你会得到不带标记的原始文本。输出中 CDATA 没有单独标记。
为什么转换后 XML 注释不见了?
因为 JSON 没有注释语法:注释在转换时会被丢弃。如果需要在目标文档中保留说明,请保留原始 XML 副本,或在转换前把重要注释移入专用元素。
为什么我的 XML 显示为无效?
常见原因:标签未闭合、闭合标签名不匹配、文本中的非法字符(如裸 & 应为 &)、多个根元素、属性引号格式错误。校验器会用红色精确定位错误行和列,修正该位置后转换即可继续。
为什么 XML 声明(<?xml version="1.0"?>)在 JSON 输出里不见了?
因为 XML 声明是编码与版本元数据,不是数据,它不会出现在 JSON 输出中。文档内的处理指令同样被跳过。命名空间声明(xmlns 属性)会保留为普通 @_ 前缀属性。
为什么我的空 <tag/> 变成了空字符串而不是 null?
因为 "" 是往返转换更安全的默认选择:空元素如 <tag/> 默认转为 "",切换「空节点」选项后可变为 null。如果元素带属性,属性会保留,空值存放在 #text 键下。需要 JSON 输出 null 值时打开开关即可。
转换器会改变数字或布尔值吗?
只有开启类型转换时才会。开启后,符合数字格式的文本(42、3.14、-1e5)变为 JSON 数字,"true"/"false" 变为布尔值。关闭时全部保持字符串。XML 没有原生类型,选择取决于 JSON 的消费方式,API 载荷通常需要数字。
元素同时包含文本和子元素怎么办?
直接文本会放在 #text 键下,与子元素键并存。例如 <p>Hello <b>world</b></p> 变成 {"b": "world", "#text": "Hello"}。纯空白文本会被修剪。这样混合内容不会静默丢失。
能转换大型 XML 文件吗?
可以:典型的配置文件与 API 响应(几 MB 以内)即时完成。超大文件(10 MB+)可能让浏览器变慢,因为一切都在本地运行。生产级解析建议使用 Node.js 的 fast-xml-parser。
Python 里怎么把 XML 转成 JSON?
常用 xmltodict 库:xmltodict.parse(xml字符串) 得到 dict,再用 json.dumps() 序列化,属性同样变成 @ 前缀的键,与本工具的约定一致。偶尔转一次的话,把 XML 粘到本工具直接复制 JSON,比写脚本更快。
JavaScript 里怎么把 XML 转成 JSON?
浏览器可以用 DOMParser 遍历 XML 树,但标准做法是 fast-xml-parser 这个 npm 包(本工具的 @_ 属性约定就来自它):new XMLParser().parse(xml) 直接返回对象。不常写代码的话,把 XML 粘到本工具复制结果即可。
它和 XML 格式化器有什么区别?
XML 格式化器美化 XML 本身(缩进、换行)并保持 XML 格式。本工具把文档转换为 JSON 数据结构,供 JavaScript、API 或 NoSQL 数据库消费。需要保留格式时用 XML 格式化器。
能从 JSON 输出中移除根元素吗?
不能:输出保留完整树结构,包括根元素,JSON 始终与 XML 文档完全对应。如果需要根元素的子级作为顶层,请在转换后手动删除根键,或调整读取输出的代码。
能从 URL 加载 XML 吗?
不能:本工具不抓取远程 URL。请复制 XML 内容粘贴到左侧面板,或打开本地 .xml 文件。这也保证了你的数据不会发送到第三方服务器。
能把 JSON 转回 XML 吗?
本工具只做 XML 转 JSON。反向转换请使用 Node.js 的 fast-xml-parser(XMLBuilder)或 xml2js 等库,这里使用的 @_ 属性前缀和 #text 键可以完整映射回 XML 源。
为什么 XML 转 JSON Java 库(Jackson)和本工具的结果不一样?
XML 转 JSON 没有统一标准,每个库都有自己的约定:属性可能变成 @attr(fast-xml-parser)、_attr(Jackson XML)或 $attr(旧工具);重复标签在有的库里变成数组、有的变成对象;纯文本节点可能是字符串,也可能包成 {"#text": "..."}。本工具遵循 fast-xml-parser 的约定并在文档中说明。如果你的代码依赖某个库的输出结构,拿一份样例用两边各转一次,把差异一次性映射好:数据内容是一样的。
为什么 XML 转 JSON 在线转换器会拒绝带 DOCTYPE 的文件?
屏蔽 DOCTYPE 和外部实体是刻意的安全设计:解析它们可能触发 XXE 攻击(外部实体展开、billion laughs),这是众所周知的 XML 安全漏洞,本工具也不会拉取任何远程资源。去掉 DOCTYPE 行再转换文档本体;如果确实需要实体展开,请在受控环境里用服务端程序处理。不含 DOCTYPE 的合法 XML 都能正常转换。