开发者工具 · JSON / 数据格式

JSON 转 XML

双向互转

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 55 次使用
JSONXML 编辑任一侧实时互转
JSON JavaScript Object Notation
XML eXtensible Markup Language
就绪 · 左侧填 JSON 或右侧填 XML,另一侧自动互转,全程本地处理
第一节

关于本工具

About

后端接口返回的 JSON 结构,前端要解析成 XML 配置文件,手动改容易漏层级或转义错。这个工具把键值对、数组、嵌套对象逐一映射为 XML 节点,支持缩进和编码设置。转换全程在浏览器本地完成,数据不上传服务器——适合接口联调时快速验证结构,或把 API 响应转成 XML 供旧系统消费。

使用场景

API对接字段映射

后端工程师对接第三方支付接口,对方返回JSON格式的订单回调数据,但内部老系统只接受XML报文。手动逐字段改写不仅耗时,还容易漏掉嵌套层级。用本工具一键转换,保留键名和数组结构,直接粘贴到XML解析器里调试,半小时的体力活压缩到10秒。

配置文件跨平台迁移

运维人员把AWS Lambda的JSON环境变量迁移到本地自建K8s集群,集群的ConfigMap要求YAML/XML格式。直接手写XML标签容易把引号或缩进搞乱,导致Pod启动失败。把JSON粘贴进来转成XML,再套一层ConfigMap模板,避免因格式错误反复重启容器。

遗留系统数据清洗

数据分析师拿到一份2003年的客户档案,导出格式是XML,里面嵌套了5层<address><city>标签。想用Python的pandas处理,必须先转成扁平JSON。手动拆标签一天都干不完,用本工具反向转换,保留原始层级关系,再写个脚本拍平,半天工作量变成20分钟。

SOAP接口调试排错

测试人员抓包发现某个SOAP请求返回的XML里,<result>节点下混入了非法字符,导致客户端解析报错。需要把XML转成JSON,用JSON的格式化工具高亮定位到具体字段,再反向转回XML去修改原报文。本工具的双向转换让排查路径从猜标签变成看键值对。

低代码平台数据导入

业务人员用钉钉宜搭收集了300条客户反馈,导出为JSON数组。但公司内部CRM系统的批量导入接口只认XML格式,且要求每条记录用<record>包裹。手动加标签会漏掉转义字符,导致导入失败。直接转成XML后批量替换根节点,省去写中间转换脚本的麻烦。

第二节

使用指南

Getting Started

使用步骤

  1. 1在左侧输入框粘贴或键入 JSON 文本,右侧编辑区同步显示对应 XML 结构,无需点击转换按钮
  2. 2点击编辑区上方的「格式化」按钮,自动缩进 XML 并高亮标签层级,便于检查嵌套关系
  3. 3切换「XML → JSON」标签,原 XML 内容自动反向解析为 JSON 格式,双向转换即时生效
  4. 4点击编辑区右上角的「复制」图标,当前格式内容直接写入剪贴板,粘贴到项目文件即可使用

输入输出示例

输入输出说明
{"name": "张三", "age": 30, "city": "北京"}<root> <name>张三</name> <age>30</age> <city>北京</city> </root>常规:最典型的扁平对象转换,验证键值对映射为子元素
{"users": [{"id": 1, "name": "李四"}, {"id": 2, "name": "王五"}]}<root> <users> <item> <id>1</id> <name>李四</name> </item> <item> <id>2</id> <name>王五</name> </item> </users> </root>常规:数组自动包裹为 <item> 元素,验证嵌套数组处理
{}<root/>边界:空对象,验证自闭合标签输出而非空元素
{"a": null}<root> <a xsi:nil="true"/> </root>边界:null 值处理,验证是否保留属性标记而非忽略
{"price": 99.99, "active": true, "desc": ""}<root> <price>99.99</price> <active>true</active> <desc/> </root>边界:布尔值和空字符串,验证数据类型保留与空串自闭合
{"data": {"nested": {"deep": 42}}}<root> <data> <nested> <deep>42</deep> </nested> </data> </root>易错:深层嵌套对象,验证缩进层级是否正确
{"@id": "123", "xml:lang": "zh"}<root> <@id>123</@id> <xml:lang>zh</xml:lang> </root>易错:XML 保留前缀(@、:)作为键名,验证是否原样输出而非报错

常见错误对照

1.JSON 字符串用了单引号

✗ 错误{'name': 'Alice', 'age': 30}
✓ 修复{"name": "Alice", "age": 30}

JSON 标准强制双引号包裹键和字符串值;单引号是 Python/JS 字面量语法,不是 JSON 语法,解析器直接报错

2.键名没有加引号

✗ 错误{name: "Alice", age: 30}
✓ 修复{"name": "Alice", "age": 30}

JS 对象字面量允许裸键名,但 JSON 要求所有键必须用双引号包裹;缺少引号会被视为语法错误

3.JSON 里写了注释

✗ 错误{ // 用户信息 "name": "Alice" }
✓ 修复{ "name": "Alice" }

JSON 标准不支持注释;// 或 /* */ 在 JSON 解析器中会导致 Unexpected token 错误,需在转换前移除

4.数字或布尔值加了引号

✗ 错误{"count": "123", "active": "true"}
✓ 修复{"count": 123, "active": true}

JSON 中数字和布尔值不加引号;加引号后变成字符串,转换到 XML 时会被包裹在 <count>123</count> 中,丢失数值类型

5.嵌套层级过深导致 XML 标签名冲突

✗ 错误{"a": {"a": 1}}
✓ 修复{"a": {"b": 1}}

XML 不允许同一父元素下出现同名兄弟标签(除非用数组);JSON 对象内相同键名嵌套时,转换器可能只保留最后一个值

6.数组元素类型不一致

✗ 错误[1, "two", true]
✓ 修复[1, 2, 3] 或 ["one", "two", "three"]

XML 转换时数组元素会被包裹在 <item> 标签中;混合类型导致生成的 XML 结构混乱,且无法用 XSD 约束

7.JSON 中使用了 undefined 或 NaN

✗ 错误{"value": undefined} 或 {"score": NaN}
✓ 修复{"value": null} 或 {"score": 0}

undefined 和 NaN 不是 JSON 合法值;JSON.stringify 会忽略 undefined,NaN 会变成 null,导致转换结果与预期不符

8.XML 根元素名称冲突

✗ 错误输入 JSON {"root": {...}} 期望根标签 <data>
✓ 修复输入 JSON {"data": {...}} 或使用工具提供的根元素名配置

JSON 转 XML 时,最外层对象的键名会成为 XML 根标签名;若键名与 XML 保留字(如 xml)相同,部分解析器会报错

第三节

工作原理

How It Works

核心公式

XML = 递归映射(JSON, 根元素名)

变量说明

  • JSON输入的 JSON 对象或数组
  • 根元素名XML 文档的根标签名称
  • 递归映射将 JSON 键转为 XML 标签,值转为内容

示例

输入 JSON:{"name":"张三","age":30,"address":{"city":"北京"}},根元素名设为 "person"。递归映射:根标签 <person>,键 name 转为 <name>张三</name>,age 转为 <age>30</age>,address 嵌套为 <address><city>北京</city></address>。最终输出:<person><name>张三</name><age>30</age><address><city>北京</city></address></person>。

JSON ↔ XML 双向转换流程输入 JSON或 XML 字符串(粘贴 / 上传)语法校验JSON.parse或 XML 解析递归转换键 → 元素名值 → 文本/属性输出结果方向切换JSON → XML或 XML → JSON数组处理自动添加索引属性转换@ 前缀处理格式化
用户输入 本地处理 输出结果
第五节

常见问题

Q & A
JSON 里有多层嵌套,转出来的 XML 能保持结构吗?

能。本工具递归处理 JSON 对象的嵌套结构,每个 JSON 对象对应 XML 的一个父节点,数组对应多个同级子节点。例如 {"a": {"b": [1, 2]}} 会转成 <a><b>1</b><b>2</b></a>。如果 JSON 中有空对象或空数组,会输出空标签。特别深的层级(超过 10 层)在浏览器渲染时可能卡顿,建议分段转换。

JSON 里 key 有数字开头或特殊字符,转 XML 会不会报错?

XML 标签名不能以数字开头,也不能含空格、冒号等特殊字符(冒号保留给命名空间)。本工具遇到这类 key 时,会自动在前面加 "_" 前缀,例如 "123key" 变成 "_123key",特殊字符替换为下划线。如果原始 key 是 "a:b",会转成 "a_b"。转换后建议检查一遍标签名是否可被下游 XML 解析器接受。

为什么我转出来的 XML 里多了个 <?xml version="1.0" encoding="UTF-8"?> 头?

这是 XML 声明,标准 XML 文档的第一行,用于声明版本和编码。本工具默认添加它,让输出符合 XML 规范。如果下游系统不需要(比如要拼接进已有 XML 片段),可以在转换后手动删除第一行。注意:如果 JSON 内容本身包含 XML 不支持的字符(如控制字符),声明中的 UTF-8 编码可能无法保留,此时建议先检查 JSON 数据。

JSON 里数组只有一项,转出来还是一个标签包一个,能不能直接展开?

本工具严格保留数组结构——即使只有一项,也会生成一个父标签包裹一个子标签,例如 {"items": ["a"]} 转成 <items><item>a</item></items>,而不是 <items>a</items>。这是为了保持 JSON 数组与 XML 子节点的语义映射一致。如果你需要扁平化输出,建议先在 JSON 侧把单元素数组改为直接值。

JSON 转 XML 和 XML 转 JSON 是互逆的吗,会不会丢数据?

基本互逆,但存在边界情况。JSON 的 null 值转 XML 会输出空标签 <tag/>,再次转回 JSON 时变成空字符串 "" 而非 null。JSON 中的数字类型(如 123)转 XML 后变成文本 "123",再转回 JSON 会变成字符串而不是数字。JSON 的布尔值 true/false 同理。所以如果原始数据有类型要求(例如计划 JSON→XML→JSON 来回传),建议在 JSON 侧做好类型标记。

JSON 文件太大(几 MB),粘贴进去浏览器卡死了怎么办?

本工具在浏览器端纯前端处理,大文件会消耗较多内存。如果粘贴后页面无响应,建议分块处理:先用 JSON 编辑器(如 jq 或在线工具)把大文件拆成多个几百 KB 的片段,逐个转换后再手动合并 XML。另外,JSON 中如果包含大量重复结构(如 10 万条日志),浏览器 DOM 渲染结果时可能卡顿,此时推荐使用 Node.js 脚本或后端工具批量处理。

XML 转 JSON 时,属性(attribute)怎么不见了?

本工具默认将 XML 属性视为标签的元数据,不直接映射到 JSON 键值对。例如 <item id="1">text</item> 转成 {"item": "text"},id 属性会被丢弃。如果需要保留属性,可以在转换前手动把属性转为子元素,例如改为 <item><id>1</id>text</item>。或者使用支持属性映射的高级 XML 解析库(如 xmltodict 的 attr_prefix 参数)单独处理。

我有一段 JSON 是字符串格式的,直接粘贴进去提示格式错误?

本工具只接受标准 JSON 对象或数组,不接受 JSON 字符串(即被引号包裹的文本)。如果你从接口复制的是类似 '"{\"a\":1}"' 的转义字符串,需要先在外面解一层转义,还原为真正的 JSON 对象。另外,JSON 字符串中不能有尾随逗号、注释、单引号等非标准格式。如果提示错误,可以先在 JSON 校验器里验证一下格式。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭