在你的设备上运行 · 你的文件从不离开你的设备。
拖入.xml文件,或者粘贴接口、订阅源、配置文件里的XML,得到可以直接使用的JSON。文档由浏览器自带的XML解析器按第一行声明的编码读取,只要格式规范就能转;格式有问题的文件会告诉你出错的行和列,以及那里出了什么问题。
映射固定且可逆:每个元素变成一个键;同名的兄弟元素变成数组;属性以@开头的键保留(id="A3"变成"@id": "A3");元素既有文本又有子元素或属性时,文本放在"#text"下。只有文本的元素直接变成那个值。
打开类型识别后,12、true这样的文本或空元素会变成数字、布尔值或null;关掉则全部保持文本。带命名空间的名字(soap:Body)按原样保留。下载前可以预览前200行。
不适用于: 格式不规范的XML(标签没闭合、HTML网页)——解析器会报告第一个问题,而不是瞎猜。
类型识别既作用于文本,也作用于属性,而且只在不丢失任何信息时才改变值。打开时,id="3"变成"@id": 3,而id="007"保持文本"007"。1.50也保持文本,因为变成数字后会写回成1.5。TRUE变成true。空元素,比如<note/>,以及只有空格的元素,变成null;单词NULL保持文本。2024-01-05这样的日期从不转换。
关掉识别时,空元素变成"",每个值都保持原样的文本。
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内置的五个(& < > " ')和 这样的数字实体。解析器停下时,提示会给出行号和列号,并用平常的话说明问题:元素用别的名字闭合、未知的名字比如 (请改写成 )、单独的&或<、第二个顶层元素,或者文件提前结束。
文件按第一行声明的编码读取,比如ISO-8859-1或windows-1256。没有声明时读作UTF-8或UTF-16,旧代码页的识别方式和CSV转JSON(/csv-to-json)里说明的一样。
本页的其他语言版本: English · العربية · Deutsch · Français · Español · Русский · Português · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা