跳到主要内容
PulsarKit

JSON转XML

用JSON生成有效的XML文档:根标签和条目标签由你命名,XML不接受的键会被修正,而不是丢掉。

把文件拖到这里

.json, .ndjson, .txt · 最大300 MB

更多设置

如何转换为XML

  1. 1

    拖入JSON文件

    添加一个文件,最多二十个。文本在这个浏览器标签页里读取和解析,语法错误会指出具体的行和列。

  2. 2

    命名根标签和条目标签

    根标签包住整个文档;条目名用于数组里的每一项。以属性前缀开头的键会变成属性。

  3. 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序列化器是页面的一部分,而不是某处的服务。没有服务器能收到这个文件,所以关闭标签页后,不会存储、记录或保留任何内容。

相关工具