在你的设备上运行 · 你的文件从不离开你的设备。
粘贴或拖入JSON,得到一个XML文档:顶部有声明,每个键一个元素。顶层只有一个键时,这个键就是根元素;其他情况全部放在<root>里。列表变成以键名命名的重复元素——"items": [..]变成多个<items>——顶层列表则变成<root>下的多个<item>。
以@开头的键变成属性,"#text"键变成元素的文本——这正是XML转JSON工具写出的形状,所以在那边转换过的文档,在这里会还原成同样的XML。其他值都是元素里的文本,null变成空元素,每层缩进两个空格。XML不允许的键名——以数字开头、含空格或符号——会用下划线修正,结果一定能被解析。
文本会正确转义(&、<、>,在属性里还有引号和换行);XML 1.0根本容纳不了的控制字符会被删除。编码UTF-8,下载前可以看到前200行的预览。文件不上传。
不适用于: 套用某个特定的XML规范(SOAP、RSS、电子发票格式)——元素名来自你的JSON键,不来自任何规范。
以@开头的键变成属性,"#text"键变成元素的文本,所以{"item": {"@id": 3, "#text": "A"}}得到<item id="3">A</item>。文档顶层只有一个键时,这个键就是根元素;否则全部内容放在<root>里。
XML名字里不允许的字符会变成下划线;名字以不允许打头的字符开头时,比如数字,前面会加一个下划线:"1st place"变成<_1st_place>。冒号只有在前缀已在上层声明时才保留,比如"@xmlns:soap";没有声明的"soap:Body"会变成<soap_Body>,否则支持命名空间的解析器读不了它。任何文字的字母都可以用,所以"اسم"或"名前"这样的键原样保留。
每个值都按文本写出,数字完全照JSON的写法:1.0还是1.0,12345678901234567890保留每一位。null和空对象都变成空元素,比如<note/>;空列表什么也不写,所以在XML里分不出这三者。
控制字符——除制表符、换行和回车以外、编码小于32的字符——在XML 1.0里根本不能写,连这样的数字形式也不行,所以会被删掉。回车写成 ,解析器才会保留它。在属性值里,引号、制表符和换行也写成引用形式,否则解析器会把它们变成空格。
重复元素只能表达一层列表。"m": [[1, 2], [3]]变成三个<m>元素,分别装着1、2和3,1和2原本属于一组这件事就没了。顶层列表也一样:[1, [3, 4]]得到三个<item>元素。如果分组很重要,先把每个内层列表包进一个对象:[{"values": [1, 2]}, {"values": [3]}]得到两个<item>元素,各自装着自己的<values>。
经过XML转JSON(/xml-to-json)的文档,会以同样的元素、属性、命名空间前缀和文本转回来,外面不会多一层包装。JSON里本来就没有的东西回不来:注释和DOCTYPE、文本在子元素之间的位置,以及不同名元素之间的顺序——它们回来时按名字归在一起。如果在XML转JSON里打开了类型识别,TRUE这样的值会以true回来;想逐字往返,就在那边关掉类型识别。
本页的其他语言版本: English · العربية · Deutsch · Français · Español · Русский · Português · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা