JSON转XML转换器
将JSON数据转换为XML。@attributes还原为元素属性,#text还原为文本内容,数组还原为同名的兄弟元素——是XML转JSON工具的逆过程,全部在浏览器中完成。
JSON 转 XML 的约定
JSON 和 XML 都用来描述结构化数据,但能表达的东西并不完全相同。XML 有「属性」和「文本内容」这两个 JSON 里并不存在的概念,所以直接转换时总会遇到两个问题:属性该怎么表示,同名元素构成的数组又该怎么还原。本工具采用被广泛使用的约定,把 `@attributes` 映射为元素属性,把 `#text` 映射为文本内容,把数组还原成同名的兄弟元素。
例如 `{"book": {"@attributes": {"id": "1"}, "#text": "标题"}}` 会变成 `
把 JSON 转换成 XML 的步骤
- 粘贴 JSON 直接输入想转换的 JSON,对象或数组都可以。
- 把要作为属性的内容放进 @attributes 希望输出为元素属性的键,请集中放在 `@attributes` 对象里。
- 把文本内容放进 #text 当一个元素既要有属性又要有正文时,把正文的值放在 `#text` 下。
- 确认结果并复制 会生成带缩进的 XML,可以直接粘贴到配置文件或 API 请求中。
用好本工具的小技巧
- 在 `@attributes` 键中放入一个对象,该对象的每个属性都会成为转换后元素的属性。
- `#text` 键用于表示与属性或子元素共存的元素的文本内容。不含属性的简单元素直接用字符串作为值即可。
- 给同一个键赋予数组,数组的每个元素都会作为同名的兄弟元素重复输出。
- 值为 `null` 时会生成不含属性、文本、子元素的空自闭合标签(`
`)。 - 本工具假定输入格式为姊妹工具"XML转JSON转换器"的输出格式(以根元素名为键的对象,顶层仅有一个键)。
这些场景会用到
发送给只接受 XML 的 API
手头的数据是 JSON,但接收方要求 XML 时可以转换。与老旧业务系统对接时经常遇到。
迁移配置文件格式
把用 JSON 写的配置迁移到基于 XML 的工具时,可以作为初稿使用。
用 JSON 来思考 XML 结构
手写层级很深的 XML 相当费力,先用 JSON 组装再转换会清晰得多。
确认约定本身
实际试一试 `@attributes` 和 `#text` 如何体现,可以为自己编写转换程序时确定规格提供参考。
JSON 转 XML 的术语
- 属性(attribute)
- `
` 中 `id="1"` 的部分。JSON 没有对应概念,因此本工具用 `@attributes` 这个特殊键来表示。 - 文本内容(#text)
- `
标题 ` 中正文的部分。当元素需要同时带有属性和正文时使用 `#text`。 - 实体引用(转义)
- 把 `&` 改写成 `&` 之类的处理。**必须先转换 `&`,否则新生成的 `<` 里的 `&` 会被二次转义。**
- 同名兄弟元素
- XML 通过重复同名标签来表示列表,JSON 数组会还原成这种形式。
- 根元素
- XML 最顶层必须只有一个元素。当 JSON 顶层含有多个键时,这一点需要留意。
常见问题
闲话 ― 将JSON"还原"为XML时需要注意的地方
XML转JSON的过程近似于"信息压缩"。XML可以同时容纳属性、文本、子元素三种信息,而JSON只有简单的键值对应关系,因此转换时必须采用某种规则(本工具采用 `@attributes`/`#text`/数组/null 这四条规则)。只要遵循该规则,将JSON"还原"为XML就是一个机械且唯一确定的过程;但如果强行将不遵循此规则的自由格式JSON转换为XML,就可能分不清哪些应该是属性、哪些应该是元素,导致结果与预期不符。
在实际工作中,有时需要先将旧版XML API的响应转换为JSON以便在JavaScript中处理,处理完后再转换回XML发送给其他系统——例如将SOAP格式API的响应转为JSON处理后,再作为SOAP格式的请求发送回去。在这种往返转换中,保持转换规则的一致性至关重要,如果中途混入采用不同规则的工具,属性与文本之间的对应关系就可能被打乱。
本工具严格要求"顶层只能有一个键",这反映了XML规范本身的要求(文档必须只有一个根元素)。如果需要转换含有多个顶层键的JSON,可以先用一个公共父键(例如 `root`)将其包裹起来再输入本工具,即可输出为具有单一根元素的XML。