JSON转XML转换器

将JSON数据转换为XML。@attributes还原为元素属性,#text还原为文本内容,数组还原为同名的兄弟元素——是XML转JSON工具的逆过程,全部在浏览器中完成。

JSON 转 XML 的约定

JSON 和 XML 都用来描述结构化数据,但能表达的东西并不完全相同。XML 有「属性」和「文本内容」这两个 JSON 里并不存在的概念,所以直接转换时总会遇到两个问题:属性该怎么表示,同名元素构成的数组又该怎么还原。本工具采用被广泛使用的约定,把 `@attributes` 映射为元素属性,把 `#text` 映射为文本内容,把数组还原成同名的兄弟元素。

例如 `{"book": {"@attributes": {"id": "1"}, "#text": "标题"}}` 会变成 `标题`,而 `{"item": [1, 2]}` 会变成 `12` 这两个兄弟元素。文本内容中的 `&` `<` `>` 会自动转义为实体引用,属性值还会额外转义 `"`,因此值里带标点符号也不会生成损坏的 XML。所有处理都在浏览器中完成。

把 JSON 转换成 XML 的步骤

  1. 粘贴 JSON 直接输入想转换的 JSON,对象或数组都可以。
  2. 把要作为属性的内容放进 @attributes 希望输出为元素属性的键,请集中放在 `@attributes` 对象里。
  3. 把文本内容放进 #text 当一个元素既要有属性又要有正文时,把正文的值放在 `#text` 下。
  4. 确认结果并复制 会生成带缩进的 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 顶层含有多个键时,这一点需要留意。

常见问题

名为 `@attributes` 的键中的对象,其每个属性都会变成转换后XML元素的属性。例如 `{"@attributes": {"category": "fiction"}}` 会转换为 `category="fiction"` 属性。

给同一个键指定数组时,数组的每个元素都会作为同名的兄弟元素多次输出。例如 `"book": [{"title": "A"}, {"title": "B"}]` 会转换为包含两个 `` 标签的XML。

最常见的原因是JSON语法错误(缺少逗号、未加引号等)。另外XML必须只有一个根元素,因此顶层有多个键的JSON,或根为数组的JSON也会导致错误。

可以,本站的"XML转JSON转换器"支持反方向转换。由于两者采用相同的转换规则,双向转换内容都能保持一致。

本工具假定采用"XML转JSON转换器"的规则(`@attributes`、`#text`、数组和null)。不遵循此规则的自由格式JSON(例如充满数字和布尔值的普通API响应)可能无法转换为预期的XML结构。
工具君

闲话 ― 将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。