JSON转XML

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

粘贴或拖入JSON,得到一个XML文档:顶部有声明,每个键一个元素。顶层只有一个键时,这个键就是根元素;其他情况全部放在<root>里。列表变成以键名命名的重复元素——"items": [..]变成多个<items>——顶层列表则变成<root>下的多个<item>。

以@开头的键变成属性,"#text"键变成元素的文本——这正是XML转JSON工具写出的形状,所以在那边转换过的文档,在这里会还原成同样的XML。其他值都是元素里的文本,null变成空元素,每层缩进两个空格。XML不允许的键名——以数字开头、含空格或符号——会用下划线修正,结果一定能被解析。

文本会正确转义(&、<、>,在属性里还有引号和换行);XML 1.0根本容纳不了的控制字符会被删除。编码UTF-8,下载前可以看到前200行的预览。文件不上传。

如何JSON转XML

  1. 拖入JSON文件,或者把JSON粘贴到文本框。
  2. 点击“转换为XML”。
  3. 看一下预览,下载.xml。

支持的格式与限制

输入
JSON(.json)——文件或粘贴的文本
输出
XML 1.0,UTF-8,顶部带声明,带缩进
根元素
顶层唯一的键,否则为<root>;顶层列表变成多个<item>
列表
以键名命名的重复元素
运行位置
在浏览器本地完成,不上传

不适用于: 套用某个特定的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里根本不能写,连&#1;这样的数字形式也不行,所以会被删掉。回车写成&#13;,解析器才会保留它。在属性值里,引号、制表符和换行也写成引用形式,否则解析器会把它们变成空格。

列表里的列表会失去分组

重复元素只能表达一层列表。"m": [[1, 2], [3]]变成三个<m>元素,分别装着1、2和3,1和2原本属于一组这件事就没了。顶层列表也一样:[1, [3, 4]]得到三个<item>元素。如果分组很重要,先把每个内层列表包进一个对象:[{"values": [1, 2]}, {"values": [3]}]得到两个<item>元素,各自装着自己的<values>。

从XML转成JSON再转回来

经过XML转JSON(/xml-to-json)的文档,会以同样的元素、属性、命名空间前缀和文本转回来,外面不会多一层包装。JSON里本来就没有的东西回不来:注释和DOCTYPE、文本在子元素之间的位置,以及不同名元素之间的顺序——它们回来时按名字归在一起。如果在XML转JSON里打开了类型识别,TRUE这样的值会以true回来;想逐字往返,就在那边关掉类型识别。

常见问题

我的文件会上传到服务器吗?
不会。转换完全在你的浏览器里完成,用的是你自己设备的算力。文件不会离开你的电脑或手机;每个工具用过一次之后,断网也照样能用。
列表怎么表示?
用重复的元素。{"items": [1, 2]}变成<items>1</items><items>2</items>。文档最顶层的列表变成<root>里的多个<item>。空列表不生成任何元素。
键名里有空格或数字开头怎么办?
XML元素名不能以数字开头,也不能含空格。这类键会被修正:"1st place"变成_1st_place,"unit price"变成unit_price。其他的原样保留。
能生成属性而不是子元素吗?
能:在键前面加@。{"item": {"@id": 3, "name": "A"}}得到<item id="3"><name>A</name></item>。这正是XML转JSON工具写出的形状,所以来回转换得到的是同一个文档。

相关工具

表格与数据中的更多工具

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