⇄ XML/JSON互转
XML↔JSON · 双向转换 · 格式化输出
XML↔JSON · 双向转换 · 格式化输出
XML的属性会被转换为对象属性(以@前缀标识),同级重复标签会被转为数组,XML注释、DTD声明和命名空间信息会丢失。
JSON的根必须是对象,数组不能作为根节点。键名会作为XML标签名,值类型会自动判断。带@前缀的键会变成属性,#text键会变成标签文本内容。
本工具默认用root作为根标签。建议转换前先在JSON里套一层你想要的根节点名,这样生成的XML根标签就能对上你的需求。
属性会用@开头作为键名,例如 <user id="1"> 会转成 {"@id":"1"}。文本内容用#text键表示。这是xml-js等库的通用约定。
同级多个同名标签会转成数组。例如 <item>a</item><item>b</item> 会变成 {"item":["a","b"]}。这是XML列表转JSON最常见的情况。
JSON更轻量、解析快、和JavaScript天然契合,是目前API的主流。XML在有复杂属性、混合内容、或需要严格文档规范(如SVG、SOAP、配置文件)时仍有优势。
可以。把XML转成JSON后,格式和常见REST接口返回结构一致,方便对照联调。但正式对接时建议用后端库(如PHP的simplexml、Node的fast-xml-parser)保证准确。
不在。XML注释、处理指令(<?xml?>)和DTD在转JSON时默认会被忽略,因为它们不属于数据内容。如果业务需要保留,得用能保留注释的专用库。
XML和JSON代表了两种不同的数据表示思想:
选择数据格式取决于具体场景:
| 场景 | 推荐格式 | 原因 |
|---|---|---|
| RESTful API | JSON | 简洁,JavaScript原生支持,传输量小 |
| SOAP Web服务 | XML | SOAP协议基于XML,强类型约束 |
| 配置文件 | JSON或XML | 现代工具倾向JSON(如package.json),传统Java/.NET倾向XML |
| 文档存储 | XML | 支持复杂结构、命名空间、验证(DTD/XSD) |
| RSS/Atom Feed | XML | 标准化成熟,阅读器广泛支持 |
| HTML/网页 | XML(XHTML) | XHTML是XML的严格子集 |
| 日志 | JSON | 结构化日志易被ELK等工具解析 |
| 跨语言互通 | JSON | 几乎所有语言都有JSON库,XML解析器更重量级 |
XML转JSON时,命名空间和属性是常见的难点:
处理大文件时,XML和JSON有显著的性能差异:
| 特性 | XML | JSON |
|---|---|---|
| 全称 | eXtensible Markup Language | JavaScript Object Notation |
| 诞生年份 | 1996年(W3C标准1998年) | 2001年(Douglas Crockford推广) |
| 设计目标 | 通用标记语言,可扩展 | 轻量数据交换格式 |
| 根元素 | 必须有单一根元素 | 对象或数组均可作为根 |
| 注释 | 支持 <!-- 注释 --> | 不支持 |
| 命名空间 | 支持 xmlns | 无原生支持 |
| 数据类型 | 全部为字符串(需Schema约束) | number/string/boolean/null/array/object |
| 属性 | 标签可以有属性 | 无属性概念,键值对统一 |
| 验证 | DTD / XSD Schema | JSON Schema(非原生) |
| 解析方式 | DOM(全文档树)/ SAX(流式) | JSON.parse(全文档) |
| 文件扩展名 | .xml | .json |
| MIME类型 | application/xml 或 text/xml | application/json |
| XML 表示 | JSON 映射 | 备注 |
|---|---|---|
| <tag>string</tag> | {"tag":"string"} | 纯文本内容 |
| <tag attr="val">text</tag> | {"tag":{"@attr":"val","#text":"text"}} | 含属性的内容 |
| 重复的同名 <item/> 标签 | {"item":[{...},{...}]} | 自动转为数组 |
| <flag>true</flag> | {"flag":true} | 需自行判断布尔类型 |
| <num>42</num> | {"num":42} | 需自行判断数字类型 |
| <empty/> | {"empty":""} | 自闭合标签转为空字符串 |
| <!-- comment --> | 无映射 | 注释在转换中丢失 |
1. 粘贴XML或JSON内容到输入框。
2. 点击对应转换按钮。
3. 查看格式化后的转换结果。