UltKit

XML转JSON转换器

把SOAP响应、RSS订阅源、配置文件或旧系统导出中的数据转成JavaScript、Python或无代码工具可以直接读取的JSON,无需手写解析器。

数据转换器

或将CSV, TSV, TXT … 文件拖放到此处 ·

单个文件最大 95 MB· 最多 20 个文件· 30 分钟后删除

输出

文件在我们的服务器上处理,并在 30 分钟后删除。

使用方法

  1. 1

    上传XML文件

    将 .xml 文件拖到上传区域,每批最多 20 个,每个文件最大 95 MB。每个文件会单独转换。

  2. 2

    选择易读格式或紧凑格式

    格式化输出默认开启,会为 JSON 添加缩进,便于阅读和代码审查。若要得到适合 API 请求体的最小单行输出,可在高级设置中关闭它。

  3. 3

    转换并使用JSON

    点击转换为 JSON,下载 .json 文件,然后在你的代码或工具中加载。

上传 XML 并点击转换为 JSON:元素会变成键,重复元素会变成数组,属性会保留为带 @ 前缀的键,因此标签中的信息不会丢失。

哪些人需要XML转JSON转换器

XML 1.0 于 1998 年 2 月成为 W3C 推荐标准,此后十年里,系统之间基本都靠它沟通:SOAP 网络服务、RSS 和 Atom 订阅源、Office 文档、银行报文、商品目录。其中许多系统至今仍在运行。RFC 8259 中规定的 JSON 则成为新 Web API 的主流,因为 JavaScript 无需解析库就能读取它,而且它几乎能直接对应各种语言中的列表和字典。

所以需要转换的人,通常是在两个时代之间搭桥。前端开发者从支付或物流服务商收到 SOAP 响应,想要一个普通对象。在 Zapier 或 Make 中搭建自动化的人,要把供应商的 XML 订阅源接入更适合处理 JSON 的流程。数据工程师要迁移旧 Java 应用的配置文件,学生则需要把 RSS 订阅源转成 JSON 做课程作业。他们想要的都是同样的结构,只是不要尖括号。

XML转JSON:标签、属性和文本如何对应

XML 输入:一个带属性的订单,包含一位客户和两件商品
<order id="A-77">
  <customer>刘洋</customer>
  <total currency="EUR">59.90</total>
  <item sku="0042">台灯</item>
  <item sku="0108">LED 灯泡</item>
</order>
上面订单的各部分在 JSON 中的呈现方式
XML 结构示例JSON 结果
根元素<order>顶层键 order
属性id="A-77""@id": "A-77"
仅含文本的元素<customer>"customer": "刘洋"
文本加属性<total currency="EUR"> 标签{"@currency": "EUR", "#text": "59.90"}
重复元素两个 <item> 标签"item": [ … , … ] 数组
注释<!-- note -->被丢弃;JSON 没有注释

XML

可扩展标记语言

XML 是 W3C 于 1998 年发布的结构化数据标记语言。它使用带属性的嵌套标签,并支持模式、命名空间和验证,因此适合处理复杂文档。RSS 订阅、SVG、Office 文档、站点地图以及许多企业和政府的数据交换都以它为基础。XML 比 JSON 冗长,但所有编程语言和许多电子表格工具都能读取。

压缩方式
–
透明度
–
动画
–
发布年份
1998 · W3C
XML 转换器

JSON

JavaScript 对象表示法

JSON 是一种轻量级结构化数据文本格式,由 Douglas Crockford 在 21 世纪初推广,并被标准化为 RFC 8259 和 ECMA-404。它用简单易读的语法表示对象、数组、字符串、数字、布尔值和 null。它是网络 API、配置文件以及几乎所有编程语言之间数据交换的默认格式。它没有内置注释、日期或模式,嵌套很深的大文件没有查看器就很难阅读。

压缩方式
–
透明度
–
动画
–
发布年份
2001 · Douglas Crockford
JSON 转换器

当旧系统或企业系统的数据需要送入网页应用、脚本或自动化工具时,就需要把 XML 转成 JSON:JSON 在 JavaScript 中可原生解析,也能直接对应 Python 字典。

JSON无法表示的XML特性

两种格式描述的都是树结构,但 XML 带有 JSON 所没有的额外内容。命名空间由 W3C 于 1999 年定义,允许一份文档混用 soap: 和 xsi: 等词汇表;在 JSON 中,它们只能作为键名的一部分保留。注释和处理指令无处安放,会被丢弃。混合内容,即文本与子标签交错出现,比如 XHTML 段落中夹着一个加粗的词,在 XML 中合法,但在 JSON 中会变得很别扭,因此文档类 XML 更适合转换为 HTML 或 Markdown,而不是 JSON。

顺序是个微妙的问题。XML 会按顺序保留同级元素,而且 schema 可能依赖这一顺序;按照标准,JSON 对象的键是无序的。重复元素在数组内部会保持顺序,这已能覆盖大多数实际数据。如果 XML 是一份扁平的记录列表,最终要放进电子表格而不是代码里,可以用 XML 转 Excel 直接得到行和列,用 XML 转 CSV 则能生成用于数据库导入的文件。

XML转JSON转换器常见问题

为什么同一个元素在一个文件里是数组,在另一个文件里却是对象?

转换器只能根据文档中已有的内容来判断。如果一个订单里有三个 item 标签,items 就会变成数组;如果只有一个,就没有重复可言,会变成单个对象。读取这份 JSON 的代码应同时兼容两种结构,或者在循环前把单个对象包装成数组。

XML属性在JSON中如何表示?

每个属性都会变成一个在名称前加 @ 的键,因此 currency="EUR" 会变成 "@currency": "EUR"。当一个元素同时有属性和文本时,文本会放在它们旁边的 #text 键中。这种约定可以避免属性与子元素同名时发生冲突。

XML中的数字会转换为JSON数字吗?

XML 本身没有数据类型;标签中的 42 和 "42" 看起来完全一样。因此所有值都会以字符串输出,这样邮政编码以及 007 这类 ID 不会出错。解析之后,请把代码需要的字段自行转换为数字。

soap:Envelope这类命名空间前缀会怎样处理?

前缀会保留在键名中,所以 envelope 会显示为 soap:Envelope,命名空间声明则显示为 @xmlns:soap 键。这样可以区分来自不同词汇表的元素;如果你只使用其中一种,可以在代码中去掉前缀。

之后能把JSON再转换回XML吗?

可以,使用 JSON 转 XML。按照同样的 @ 和 #text 约定,属性会还原为属性。注释和原有的缩进无法还原,因为 JSON 中从未保存过它们。