JSON转XML
用JSON生成有效的XML文档:根标签和条目标签由你命名,XML不接受的键会被修正,而不是丢掉。
把文件拖到这里
.json, .ndjson, .txt · 最大300 MB
更多设置收起设置
如何转换为XML
- 1
拖入JSON文件
添加一个文件,最多二十个。文本在这个浏览器标签页里读取和解析,语法错误会指出具体的行和列。
- 2
命名根标签和条目标签
根标签包住整个文档;条目名用于数组里的每一项。以属性前缀开头的键会变成属性。
- 3
转换并下载XML
点击按钮,得到带声明、带缩进的文档。批量处理的结果打包成一个ZIP压缩包。
XML不接受作标签名的键
JSON对象的键几乎没有限制,XML的元素名却有。“2024 sales”“order id”和空字符串都是合法的键,但都不能直接写成标签。悄悄丢掉这些字段会丢失数据,所以非法字符改成下划线,以数字开头的名称前面加上n,完整的新旧名称对照表随结果一起返回。
XML完全禁止的字符
&和尖括号靠转义就能处理。0x20以下的控制字符是另一回事:不管怎么写,XML 1.0都会拒绝,实体和CDATA块都救不了。从电子表格单元格里粘贴进来的一个0x0B,就能让整个文档无法解析,所以这些字节会被去掉并计数,数量显示在结果旁边。
属性、文本节点和null
以属性前缀(默认是@_)开头的键,会变成父元素的属性,而不是子元素;文本键保存元素自身的文本。JSON有null,XML没有对应的东西,所以由你决定:空元素、用xsi:nil标记的元素,或者干脆不输出元素。
文件不会离开这个标签页
读取文件、解析JSON、修正名称和序列化XML,全部在你的浏览器里完成,运行在一个工作线程中,用的是随页面加载的代码。没有上传步骤,没有处理队列,也不需要账号。关闭标签页,文件就没了,因为它从未在别处留下任何副本。
常见问题
怎么设置根元素的名称?
根名称是页面上的第一个字段,默认是root。它必须是合法的XML名称(字母、数字、点、连字符和下划线,不能以数字或保留前缀xml开头)。如果不合法,会马上提示,并给出修改建议。
怎么把JSON的键变成XML属性?
在JSON里给键加上@_前缀,它就会变成外层元素的属性,而不是嵌套标签。前缀可以自定义,最多三个字符;清空前缀就完全关闭属性映射,每个键都会变成元素。
不是有效XML标签名的键会怎么样?
默认会被修正:非法字符变成下划线,开头的数字前面加上n,空键改用条目名。你会收到一条警告,列出改了哪些名称。也可以选择不提示、直接全部修正,或者遇到第一个不合法的键就报错停止。
null值会怎么处理?
有三个选项。空元素让字段在文档里保持可见;xsi:nil按支持Schema的程序所期望的方式把它标记为明确的null,并在根元素上声明命名空间;跳过则不输出这个字段。默认是空元素,因为来回转换时结果最可预测。
什么时候需要CDATA?
很少需要,因为普通转义总是正确的。CDATA主要是为了可读性,用在值里有大量类似标记的文本时:打开后,超过200个字符的字符串,或含有尖括号和&的字符串,会放进CDATA块。值里如果有字面的]]>,会拆到两个块里,保证输出仍然有效。
键的顺序会保留吗?
会。元素按键在源JSON里出现的顺序写出,数组各项保持原来的索引顺序。XML要求属性写在子元素前面,但属性之间同样按源顺序排列,所以每次运行的输出足够稳定,可以直接对比差异。
文件会上传到什么地方吗?
不会。一切都在你的浏览器标签页里完成,JSON解析器和XML序列化器是页面的一部分,而不是某处的服务。没有服务器能收到这个文件,所以关闭标签页后,不会存储、记录或保留任何内容。