123问免费工具与知识服务
123问工具大全› 工具大全› 开发工具› XML/JSON互转

⇄ XML/JSON互转

XML↔JSON · 双向转换 · 格式化输出

XML/JSON互转常见问题

XML转JSON会丢失哪些信息?

XML的属性会被转换为对象属性(以@前缀标识),同级重复标签会被转为数组,XML注释、DTD声明和命名空间信息会丢失。

JSON转XML要注意什么?

JSON的根必须是对象,数组不能作为根节点。键名会作为XML标签名,值类型会自动判断。带@前缀的键会变成属性,#text键会变成标签文本内容。

JSON转XML的根节点叫什么?

本工具默认用root作为根标签。建议转换前先在JSON里套一层你想要的根节点名,这样生成的XML根标签就能对上你的需求。

XML里的属性在JSON里怎么表示?

属性会用@开头作为键名,例如 <user id="1"> 会转成 {"@id":"1"}。文本内容用#text键表示。这是xml-js等库的通用约定。

重复的同名标签会怎么处理?

同级多个同名标签会转成数组。例如 <item>a</item><item>b</item> 会变成 {"item":["a","b"]}。这是XML列表转JSON最常见的情况。

XML和JSON哪个更适合做数据交换?

JSON更轻量、解析快、和JavaScript天然契合,是目前API的主流。XML在有复杂属性、混合内容、或需要严格文档规范(如SVG、SOAP、配置文件)时仍有优势。

转换结果能直接用于接口联调吗?

可以。把XML转成JSON后,格式和常见REST接口返回结构一致,方便对照联调。但正式对接时建议用后端库(如PHP的simplexml、Node的fast-xml-parser)保证准确。

样板文件例子里的XML带注释,转换后还在吗?

不在。XML注释、处理指令(<?xml?>)和DTD在转JSON时默认会被忽略,因为它们不属于数据内容。如果业务需要保留,得用能保留注释的专用库。

XML/JSON互转 - 示例演示

示例一:简单XML转JSON

输入:输入XML:三体刘慈欣
结果:输出JSON:{"book":{"title":"三体","author":"刘慈欣"}}
简单XML标签直转为JSON对象属性,嵌套结构保持层级关系。注意根元素会生成最外层对象。

示例二:带属性XML转JSON

输入:输入XML:三体
结果:输出JSON:{"book":{"@id":"1","@lang":"zh","title":"三体"}}
XML属性以@前缀标识(如@id="@lang"),便于与子元素区分。同级重复标签自动转为数组。

示例三:JSON转XML

输入:输入JSON:{"root":{"product":[{"name":"手机","price":2999},{"name":"平板","price":4999}]}}
结果:输出XML含.........
JSON数组的每个元素生成同名XML标签。键名作为标签名,值自动判断类型并格式化。

XML/JSON互转深度解读

XML 与 JSON 设计哲学差异

XML和JSON代表了两种不同的数据表示思想:

  • XML是"以文档为中心":强调结构、元数据和语义,设计目标是人类可读且机器可处理,支持注释、命名空间、Schema验证
  • JSON是"以数据为中心":强调简洁和序列化效率,设计目标是在JavaScript中直接使用,天然匹配编程语言的数据结构
  • XML支持属性:同一标签可以有属性(元数据)和内容(数据),JSON用键值对统一表示
  • JSON类型系统更丰富:原生支持number/string/boolean/null/array/object,XML所有内容默认是字符串

何时用 XML,何时用 JSON

选择数据格式取决于具体场景:

XML vs JSON 使用场景
场景推荐格式原因
RESTful APIJSON简洁,JavaScript原生支持,传输量小
SOAP Web服务XMLSOAP协议基于XML,强类型约束
配置文件JSON或XML现代工具倾向JSON(如package.json),传统Java/.NET倾向XML
文档存储XML支持复杂结构、命名空间、验证(DTD/XSD)
RSS/Atom FeedXML标准化成熟,阅读器广泛支持
HTML/网页XML(XHTML)XHTML是XML的严格子集
日志JSON结构化日志易被ELK等工具解析
跨语言互通JSON几乎所有语言都有JSON库,XML解析器更重量级

XML 命名空间与属性处理

XML转JSON时,命名空间和属性是常见的难点:

  • XML命名空间(xmlns)在JSON中没有直接对应,通常转为@xmlns属性或直接忽略
  • 属性值转为@前缀的属性键(如id=@id),这是BadgerFish约定的常见做法
  • XML注释()在转换时会丢失,JSON不支持注释
  • XML的DTD/DOCTYPE声明在转换时会被丢弃
  • 同级重复标签自动转为数组,单次出现的标签保留为对象(而非单元素数组)
  • 混合内容(文本与子标签混合)在JSON中难以表示,通常提取#text属性

大文件 XML/JSON 性能对比

处理大文件时,XML和JSON有显著的性能差异:

  • JSON解析通常比XML快2-5倍(JSON.parse是JavaScript原生优化,XML需要DOM或SAX解析)
  • JSON文件通常比同等XML小20-40%(XML的闭合标签和属性语法更冗余)
  • XML支持流式解析(SAX/StAX),可处理超大文件而不将整个文档加载到内存
  • JSON的流式解析较难实现,大JSON文件需要分块或使用专门的流式解析器
  • 对于超过100MB的数据文件,XML的流式处理优势明显
  • 在浏览器端,JSON.parse性能远优于DOMParser,移动端差异更明显

XML/JSON互转参考数据

XML vs JSON 特性对比

特性XMLJSON
全称eXtensible Markup LanguageJavaScript Object Notation
诞生年份1996年(W3C标准1998年)2001年(Douglas Crockford推广)
设计目标通用标记语言,可扩展轻量数据交换格式
根元素必须有单一根元素对象或数组均可作为根
注释支持 <!-- 注释 -->不支持
命名空间支持 xmlns无原生支持
数据类型全部为字符串(需Schema约束)number/string/boolean/null/array/object
属性标签可以有属性无属性概念,键值对统一
验证DTD / XSD SchemaJSON Schema(非原生)
解析方式DOM(全文档树)/ SAX(流式)JSON.parse(全文档)
文件扩展名.xml.json
MIME类型application/xml 或 text/xmlapplication/json

XML/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. 查看格式化后的转换结果。

分享工具: Facebook Twitter 微博 复制链接