§

输入

模式
§

输出

国内团队每天都在桥接 XML 和 JSON,通常是因为技术栈的两端在格式上存在分歧。国家医保局的 HL7 FHIR 接口同时提供 XML 和 JSON 格式。金融机构的 SOAP 服务返回 XML 信封,而 React 前端希望以 JSON 消费。工商、税务和海关申报系统仍大量使用 XML,数据工程师需要将其整形为 JSON 后才能入库至 ClickHouse 或阿里云 MaxCompute。每种情况的解决方法相同:一个快速的本地转换工具,可以对新载荷反复运行,无需将任何内容发送出去。

什么是 XML ↔ JSON 转换?

XML(可扩展标记语言)是一种基于标签的层次数据文本格式。您会在 SOAP Web 服务、RSS 和 Atom Feed、HL7 FHIR 健康记录、sitemap.xml 文件以及 Maven、Spring 和 Android Gradle 附带的配置文件中看到它。JSON(JavaScript 对象表示法,由 RFC 8259 定义)描述同类嵌套数据,但用花括号和数组代替开闭标签。JSON 是当今几乎所有 REST API 的语言,也是每个浏览器运行时的原生值形状。在两种格式之间转换乍听简单,直到您遇到属性、混合内容、重复子节点和 CDATA。自定义正则表达式是错误答案;真正的解析器才是正确答案。本工具内置了真正的解析器(fast-xml-parser)并在您的浏览器中运行,您可以粘贴旧版 SOAP 服务返回的 XML 信封,看着它变成可直接放入 Redux store 的 JSON 对象;或者将在 REST 客户端中组装好的 JSON 载荷转换回企业接口仍期望的 XML 形状。

XML ↔ JSON 映射是如何工作的?

每次转换都在您的浏览器中使用捆绑的 fast-xml-parser 库(MIT,4.x 版)本地运行。高级映射规则如下:

  1. 元素转键:每个 XML 元素名成为 JSON 对象键。<user><name>Alice</name></user> 映射为 {"user":{"name":"Alice"}}
  2. 属性转前缀键:属性存储在以所选前缀开头的键下。前缀为 @ 时,<user id="1"> 产生 {"user":{"@id":"1"}}
  3. 文本内容转文本节点键:当元素同时有属性和文本时,文本落在所选文本节点键下。<price currency="USD">9.99</price> 使用键 #text 时产生 {"price":{"@currency":"USD","#text":"9.99"}}
  4. 重复子节点转数组:开启重复子标签强制数组时,多个同名兄弟元素折叠为 JSON 数组。<items><item>A</item><item>B</item></items> 变为 {"items":{"item":["A","B"]}}
  5. CDATA 节:<![CDATA[…]]> 内的原始文本保存在 #cdata 键下,使得角括号和和号在往返转换中不被重新转义。
  6. JSON 转 XML 反转映射:对象键成为元素,前缀键成为属性,数组展开为重复的兄弟元素。

为什么使用此工具转换 XML 和 JSON?

  • 您的数据留在您的设备上。每次解析和构建都在本页面的 JavaScript 上下文中运行。FHIR 患者包、SOAP 认证信封、专有配置文件、账单导出——这些内容都不会触碰我们的服务器,因为代码路径中根本没有上传步骤。打开 Network 面板亲眼确认。
  • 将旧版 SOAP 接入以 REST 优先的前端是我们最常听到的需求。一家银行或保险公司暴露了一个多年内不会退役的 SOAP 接口;调用它的 React 或 Vue 应用不想学习 XML。粘贴信封,取回属性已添加前缀且命名空间已保留的 JSON,将 Body 内容放入状态管理。
  • RSS、Atom 和 sitemap 消费者同样受益。播客目录、新闻聚合器或摄取 sitemap.xml 的内部仪表板,可以完全跳过编写 XML 解析器。一次性转换 Feed,使用 JSON 数组,您的客户端代码继续用它已经熟悉的语言。
  • 配置导出是最后一个场景。Maven、Spring、Android Gradle 和老式 Ant 构建都输出 XML;另一端的云原生工具(Terraform、Ansible、GitHub Actions)读取 JSON 或 YAML。在浏览器中转换,而不是运行依赖第三方库的 Python 脚本——在隔离环境中尤其有用。

XML ↔ JSON 转换的常见应用场景是什么?

XML 和 JSON 的桥接出现在集成工程、API 工具和数据工程中。几种模式在工作量上占主导:

  • SOAP 转 REST 桥接:将旧版银行或保险 API 返回的 SOAP 信封中的 Body 载荷提取并转换为 JSON,使 React 或 Vue 前端无需在其前面放置服务端代理层即可消费。
  • FHIR 健康记录:将 HL7 FHIR XML 包(卫健委互联互通标准及医疗数据交换所需的格式)转换为 JSON,以加载到 MongoDB Atlas 集合或 PostgreSQL JSONB 列中供分析师查询。
  • Sitemap 和 Feed 处理:将 sitemap.xml 或 RSS/Atom Feed 转换为 JSON 数组,使自定义索引器、机器人或仪表板组件无需引入 XML 解析依赖即可迭代条目。

XML ↔ JSON 往返转换是什么样的?

看一个小例子。将 <user id="1"><name>Alice</name></user> 粘贴到输入框,属性前缀设为 @,模式保持 XML 转 JSON,点击「转换」。输出为 {"user":{"@id":"1","name":"Alice"}}。将模式切换为 JSON 转 XML,将该 JSON 粘贴回去,缩进设为 2 个空格,再次点击「转换」。您将得到 <user id="1">\n <name>Alice</name>\n</user>,与原始内容结构完全相同。往返转换中唯一不保证的是属性顺序,因为 JSON 对象键在规范上是无序的。

本 XML ↔ JSON 转换器将 fast-xml-parser@4 捆绑在同一来源,处理属性、CDATA、重复子标签和命名空间前缀,页面加载后可离线工作。无上传步骤、无 CDN 代理、无任何形式的遥测。输入和输出的每个字节都留在您的浏览器中,这正是当载荷恰好是 FHIR 患者包、SOAP 认证信封或任何其他团队以外的人都不应看到的数据形态时,您所期望的。