跳到正文

JSON ⇄ XML 互转

JSON ⇄ XML

在 JSON 和 XML 之间转换,属性、数组和文本节点的处理方式都能配置。

把 XML 转成 JSON,再转回去。两者之间没有规范的映射——XML 有属性、有序的混合内容和命名空间,JSON 一样都没有——所以这个页面把它的选择摆明并让你改,而不是藏起一套约定。

🔒 完全在你的浏览器里运行jsonxmlconvert
方向

属性会写成 `@id` 的样子。

元素自己的文本放在这里。

XML

JSON

XML 和 JSON 之间没有标准的对应关系,所以这里把自己的选择讲明白:属性会变成 @name 这样的键,元素自己的文本放进 #text,同名的兄弟节点会变成数组。最后这一条就是往返时可能丢信息的地方——只有一个元素的列表,若不打开「总是用数组」,回来时会成为单个对象。

输入

215个字符

输出

399个字符

怎么用

  1. 选方向

    两边各自保留输入,所以来回切换不会丢掉你粘贴过的东西。

  2. 设置属性前缀和文本键

    `@` 和 `#text` 是流行的约定(fast-xml-parser、xml2js 等都在用),但如果你必须生成的 JSON 用的是别的,在这里改,不要事后再处理。

  3. JSON 要交给代码时,打开「始终用数组」

    这是映射里有损的那部分:一个 `<item>` 变成对象,两个变成数组,消费代码得两种都处理。强制用数组让形状稳定,代价是多一点啰嗦。

常见问题

走一个来回能拿回我的 XML 吗?

结构上通常能,逐字节不能。注释、处理指令,以及 `<a/>` 和 `<a></a>` 的区别都不会保留;混合内容——文本和元素交错——无法以保留顺序的方式在 JSON 里表示。

为什么 `12` 是字符串?

因为 XML 没有类型——文档里的每个值都是文本,只有 schema 才会说不是。「强制转换」开关会猜数字和布尔值,但那是猜:产品编号 `0123` 变成 123,版本号 `1.10` 变成 1.1。

命名空间会怎样?

前缀作为元素名的一部分保留——`soap:Body` 变成键 `soap:Body`——`xmlns` 声明作为普通属性带过来。什么都不会解析成命名空间 URI,所以两份对同一命名空间用了不同前缀的文档会产生不同的 JSON。

能喂给它一份 SOAP 响应吗?

能,这也是来这个页面的常见原因之一。信封、正文和载荷都以嵌套对象的形式出来;SOAP 的属性落在 `@` 键里。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。