JSON 转 XML 转换器
将 JSON 粘贴到左侧,得到格式化的 XML。@_ 前缀的键变成属性。完全在浏览器中运行 — 无需上传。
- 将 JSON 粘贴到左侧文本区。
- 点击「转换为 XML」。JSON 键变为元素;@_ 键变为属性。
- 复制或下载格式化的 XML。
- 请用单个根键包裹数据 — XML 需要一个顶级元素。
它能做什么?
按 fast-xml-parser 约定将 JSON 对象转换为 XML。对象属性变为子元素;`@_` 前缀的属性变为父元素的 XML 属性;数组变为重复出现的同名兄弟元素。数字、布尔和字符串作为文本内容输出。结果会被缩进以便阅读。
示例
JSON 输入:
{
"root": {
"@_version": 1,
"name": "Ada",
"tags": ["math", "logic"]
}
} XML 输出:
<root version="1">
<name>Ada</name>
<tags>math</tags>
<tags>logic</tags>
</root> 常见 JSON → XML 陷阱
XML 在结构上比 JSON 严格。下列模式覆盖了大多数让你意外的结果。
- 没有单一根。 XML 需要恰好一个根元素。顶层有多个键的 JSON 会产生多个根,这是无效的 XML。请用单个键包裹: `{"root": {"a":1, "b":2}}`。
- 顶层是数组。 JSON 数组 `[{"a":1},{"a":2}]` 没有可用的根元素名。请包裹: `{"items": [{"a":1},{"a":2}]}`。每个数组项都会变为一个 `<items>` 元素。
- 元素名含空格或符号。 XML 元素名不能含空格、不能以数字开头、不能含 `:`、`/`、`<` 等字符。转换前请清理 JSON 键 — 把空格改为 `_`,数字开头加上字母前缀。
- 属性 vs 元素。 JSON 键 `id` 会变成子元素 `<id>1</id>`。要让它成为属性(`<user id="1">`),请在键前加 `@_`: `{"user":{"@_id":1}}`。前缀在输出时会被去掉。
- null 值。 JSON `null` 会变成空元素(`<x/>`)。如果想完全省略,请在转换前从 JSON 中剔除 null 值。
- 文本中的特殊字符。 XML 会自动转义 `<`、`>`、`&`、`"` 与 `\'`。JSON 字符串 `"<b>hi</b>"` 会变为文本 `<b>hi</b>`,而不是嵌套元素。需要真正的嵌套,请直接用 JSON 结构表达。
常见问题
怎么获得 XML 声明 `<?xml version="1.0"?>`?
请自行在输出前手动添加 — 转换器不会输出声明。UTF-8 XML 通常加上: `<?xml version="1.0" encoding="UTF-8"?>`,后面再跟你转换得到的 XML。
JSON 数组会保留为重复元素吗?
会。`{"tags":["a","b"]}` 会变为 `<tags>a</tags><tags>b</tags>` — 两个同名兄弟元素,这是 XML 表达「重复值」的标准方式。
能在 XML 中得到 JSON 风格的嵌套数组吗?
不能直接得到。XML 没有原生数组概念,只有重复出现的兄弟元素。JSON 中的嵌套数组会变成更扁平的 XML 结构,分组依赖上下文。XML → JSON → XML 通过本工具往返时只保留可往返的子集。
日期如何处理?
JSON 没有 Date 类型 — 日期通常已是 ISO 8601 字符串。这些会原样作为元素文本输出。如果下游 XML 需要特定日期格式,请在 JSON 中先调好。
我的 JSON 会被上传吗?
不会。一切都在你的浏览器里运行 — 输入由本页 JavaScript 解析与转换,从不发送到任何服务器。
JSON → XML → JSON 往返会保留我的数据吗?
对于使用 @_ 属性约定的常见结构,从语义上是会的。一些边界情况(混合文本与子元素、属性顺序与元素顺序)可能会被规范化。如果需要逐字节相同,就不要走 XML 这一圈。