正在加载,请稍候…

XML 转 JSON 转换器:从遗留 XML API 迁移

将 XML 转换为 JSON 以用于现代应用程序。了解结构差异和常见转换模式。

XML 转 JSON 转换器:从遗留 XML API 迁移

XML 与 JSON:何时以及为何转换

XML(可扩展标记语言)和 JSON(JavaScript 对象表示法)都是基于文本的数据交换格式,但它们服务于不同的生态系统。XML 在 2000 年代主导了企业和 Web 服务,而 JSON 已成为现代 REST API 的标准。在集成旧系统与新系统时,两者之间的转换是一项常见任务。

XML 转 JSON 转换器:从遗留 XML API 迁移 插图

为什么将 XML 转换为 JSON?

现代 API 消费

大多数 JavaScript 框架和现代后端原生支持 JSON。来自旧 API 的 XML 响应需要转换后才能轻松处理。

性能

JSON 通常比等效的 XML 更紧凑:

  • XML 为每个字段使用开闭标签
  • XML 需要显式类型声明
  • JSON 数组自然映射到 JavaScript 数组
  • JSON 解析在 JavaScript 引擎中通常更快

开发者体验

JSON 更易于手动阅读和编写。JSON.parse()JSON.stringify() 函数内置于每个 JavaScript 运行时中。

集成

现代工具如 Node.js、Python 的 requests 库以及几乎所有 REST API 都原生使用 JSON。

XML 结构与 JSON 结构

简单 XML

<user>
  <id>123</id>
  <name>Alice Smith</name>
  <email>alice@example.com</email>
  <active>true</active>
</user>

等效 JSON:

{
  "user": {
    "id": "123",
    "name": "Alice Smith",
    "email": "alice@example.com",
    "active": "true"
  }
}

XML 转 JSON 转换器:从遗留 XML API 迁移 插图

带属性的 XML

<product id="456" category="electronics">
  <name>Laptop</name>
  <price currency="USD">999.99</price>
</product>

属性的常见 JSON 表示:

{
  "product": {
    "@id": "456",
    "@category": "electronics",
    "name": "Laptop",
    "price": {
      "@currency": "USD",
      "#text": "999.99"
    }
  }
}

属性在 XML 到 JSON 转换中会造成歧义——不同的库处理方式不同。

XML 数组(重复元素)

<users>
  <user><id>1</id><name>Alice</name></user>
  <user><id>2</id><name>Bob</name></user>
</users>

JSON 转换(对象数组):

{
  "users": {
    "user": [
      {"id": "1", "name": "Alice"},
      {"id": "2", "name": "Bob"}
    ]
  }
}

XML 转 JSON 的常见挑战

类型信息

XML 没有原生类型系统——所有内容都是文本。在上面的例子中,id 变成了字符串 "123" 而不是数字 123。类型强制转换必须显式处理或通过约定处理。

属性与元素

XML 同时支持 <tag attribute="value">content</tag> 和嵌套的 <parent><child>value</child></parent>。这些需要在 JSON 表示中一致处理。

带属性的文本节点

当 XML 元素同时具有属性和文本内容时,JSON 必须表示两者,通常使用特殊键如 #text 表示文本内容。

命名空间

XML 支持 XML 命名空间(xmlns:prefix="uri")。这会显著复杂化 JSON 表示。大多数转换器会去除命名空间或将其扁平化。

XML 转 JSON 转换器:从遗留 XML API 迁移 插图

CDATA 段

<![CDATA[... raw content ...]]> 段包含不应解析为 XML 的文本。这些通常转换为 JSON 中的纯字符串。

注释

XML 注释(<!-- comment -->)在 JSON 转换中被丢弃,因为 JSON 没有注释语法。

流行的转换库

JavaScript

  • xml2js:简单、广泛使用的 Node.js 库
  • fast-xml-parser:高性能,可自定义输出
  • xml-js:一致处理属性和元素

Python

  • xmltodict:将 XML 转换为 Python 字典(可序列化为 JSON)
  • lxml:全面的 XML/HTML 处理,提供 ElementTree API

命令行

  • xq(来自 yq/xq 工具):XPath 查询,JSON 输出
  • python3 -c "import xmltodict, json, sys; print(json.dumps(xmltodict.parse(sys.stdin.read()), indent=2))":快速单行命令

XML Web 服务(SOAP)

许多遗留企业系统使用 SOAP(简单对象访问协议),它将业务数据包装在 XML 信封中:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getUser>
      <userId>123</userId>
    </getUser>
  </soap:Body>
</soap:Envelope>

将 SOAP 响应转换为 JSON 通常需要剥离信封并提取相关负载。

使用 XML 转 JSON 转换器

我们的工具:

  1. 粘贴 XML 内容——接受任何格式良好的 XML
  2. 即时 JSON 输出——实时转换
  3. 属性处理——选择如何表示 XML 属性
  4. 数组检测——正确识别重复元素为数组
  5. 格式化选项——缩进(可读)或紧凑输出
  6. 复制 JSON——一键复制结果
  7. 下载——保存 JSON 文件

用于转换来自遗留 SOAP 或 XML 服务的 API 响应、转换配置文件以及将 XML 数据源集成到现代应用程序中。