XML转JSON

在你的设备上运行 · 你的文件从不离开你的设备。

拖入.xml文件,或者粘贴接口、订阅源、配置文件里的XML,得到可以直接使用的JSON。文档由浏览器自带的XML解析器按第一行声明的编码读取,只要格式规范就能转;格式有问题的文件会告诉你出错的行和列,以及那里出了什么问题。

映射固定且可逆:每个元素变成一个键;同名的兄弟元素变成数组;属性以@开头的键保留(id="A3"变成"@id": "A3");元素既有文本又有子元素或属性时,文本放在"#text"下。只有文本的元素直接变成那个值。

打开类型识别后,12、true这样的文本或空元素会变成数字、布尔值或null;关掉则全部保持文本。带命名空间的名字(soap:Body)按原样保留。下载前可以预览前200行。

如何XML转JSON

  1. 拖入XML文件,或者把XML粘贴到文本框。
  2. 决定要不要识别数字、布尔值和空元素的类型。
  3. 点击“转换为JSON”,看一下预览。
  4. 下载.json。

支持的格式与限制

输入
XML(.xml)——文件或粘贴的文本,按其声明的编码读取
输出
JSON,带缩进,UTF-8
属性
以"@name"键保留
重复元素
变成数组
运行位置
在浏览器本地完成,不上传

不适用于: 格式不规范的XML(标签没闭合、HTML网页)——解析器会报告第一个问题,而不是瞎猜。

哪些值会改变类型

类型识别既作用于文本,也作用于属性,而且只在不丢失任何信息时才改变值。打开时,id="3"变成"@id": 3,而id="007"保持文本"007"。1.50也保持文本,因为变成数字后会写回成1.5。TRUE变成true。空元素,比如<note/>,以及只有空格的元素,变成null;单词NULL保持文本。2024-01-05这样的日期从不转换。

关掉识别时,空元素变成"",每个值都保持原样的文本。

JSON保留不了的东西

XML文档里有些部分在JSON里没有位置,会被丢掉:注释、处理指令和DOCTYPE。CDATA段变成普通文本,所以<a><![CDATA[<b>x</b>]]></a>得到"a": "<b>x</b>"。

不同名元素之间的顺序会丢失,因为每个名字只成为一个键。在<step>1</step><note/><step>2</step>里,两个step被归到"step": [1, 2],没有任何地方记录note夹在它们中间。夹在标记里的文本也同样失去位置:<p>Hello <b>world</b> and <i>you</i>!</p>变成"b": "world"、"i": "you"和"#text": "Hello and !"。对于顺序本身就是内容的文档,比如带格式的正文,这种映射并不合适。

命名空间、实体、报错和编码

带前缀的名字按原样保留,命名空间声明以属性的形式出现:<soap:Envelope xmlns:soap="…">得到一个键"soap:Envelope",里面有"@xmlns:soap",JSON转XML(/json-to-xml)会把两者都还原成同样的XML。

除了文档自己的DOCTYPE定义的实体,只认XML内置的五个(&amp; &lt; &gt; &quot; &apos;)和&#160;这样的数字实体。解析器停下时,提示会给出行号和列号,并用平常的话说明问题:元素用别的名字闭合、未知的名字比如&nbsp;(请改写成&#160;)、单独的&或<、第二个顶层元素,或者文件提前结束。

文件按第一行声明的编码读取,比如ISO-8859-1或windows-1256。没有声明时读作UTF-8或UTF-16,旧代码页的识别方式和CSV转JSON(/csv-to-json)里说明的一样。

常见问题

我的文件会上传到服务器吗?
不会。转换完全在你的浏览器里完成,用的是你自己设备的算力。文件不会离开你的电脑或手机;每个工具用过一次之后,断网也照样能用。
属性和混合内容怎么处理?
属性变成以@开头的键,<item id="A3">得到"@id": "A3"。元素既有文本又有属性或子元素时,文本存在"#text"下;只有文本的元素直接变成那段文本。
为什么有的元素是对象,重复的却是数组?
在父元素下只出现一次的元素变成对象(或值);两个及以上同名的兄弟元素变成数组。这样和文档一一对应,所以只有一项的列表是一个对象——代码里两种情况都需要数组的话,在接收端包一下。
JSON的最外层是什么样?
一个以根元素命名的键,里面装着全部内容——<records>…</records>变成{"records": {...}}。保留根元素的名字,JSON转XML工具才能重建同样的文档。

相关工具

表格与数据中的更多工具

本页的其他语言版本: English · العربية · Deutsch · Français · Español · Русский · Português · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা