JSON ⇄ XML 互转
JSON ⇄ XML
在 JSON 和 XML 之间转换,属性、数组和文本节点的处理方式都能配置。
把 XML 转成 JSON,再转回去。两者之间没有规范的映射——XML 有属性、有序的混合内容和命名空间,JSON 一样都没有——所以这个页面把它的选择摆明并让你改,而不是藏起一套约定。
属性会写成 `@id` 的样子。
元素自己的文本放在这里。
XML
JSON
@name 这样的键,元素自己的文本放进 #text,同名的兄弟节点会变成数组。最后这一条就是往返时可能丢信息的地方——只有一个元素的列表,若不打开「总是用数组」,回来时会成为单个对象。输入
215个字符
输出
399个字符
怎么用
选方向
两边各自保留输入,所以来回切换不会丢掉你粘贴过的东西。
设置属性前缀和文本键
`@` 和 `#text` 是流行的约定(fast-xml-parser、xml2js 等都在用),但如果你必须生成的 JSON 用的是别的,在这里改,不要事后再处理。
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 的属性落在 `@` 键里。
可以从这些接进来
XML 格式化与校验
XML Formatter & Validator
整理 XML 缩进,并报出第一处结构不合法的行和列。
XPath 测试器
XPath Tester
对 XML 或 HTML 求值 XPath 或 CSS 选择器,把命中的节点全部列出来。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
YAML 格式化与校验
YAML Formatter & Validator
统一 YAML 缩进并校验语法,把会让解析器崩掉的制表符和锚点错误标出来。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
JSONPath 测试器
JSONPath Tester
对文档运行 JSONPath 表达式,边输入边高亮命中的节点。
XML 格式化与校验
XML Formatter & Validator
整理 XML 缩进,并报出第一处结构不合法的行和列。
XPath 测试器
XPath Tester
对 XML 或 HTML 求值 XPath 或 CSS 选择器,把命中的节点全部列出来。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
curl 转代码
curl to Code
把一条 curl 命令转成 fetch、axios、Python requests、Go、PHP 或 PowerShell 代码。