跳到正文

XML 转 JSON 在线转换

把 XML 文档转成 JSON:属性变成 @ 开头的键,重复元素变成数组,数字按数字类型输出。由浏览器自带的 XML 解析器在你的设备上完成解析。

转换为
把 XML 文件拖到这里XML 最大 100 MB · JSON、CSV、XLSX、XLS、ODS 最大 500 MB
选择文件在你的设备上处理,不会上传
在浏览器中运行 · 无需上传工作原理

XML 转 JSON 使用方法

  1. 1

    粘贴或拖入 XML

    可以是 .xml 文件、RSS 或 Atom 订阅源、SOAP 响应,或任意 XML 文本;会按声明中的编码读取。

  2. 2

    设置 JSON 结构

    属性可以写成 @ 键、普通键或直接忽略;数组可以只用于重复元素,也可以全部使用;数字可以按类型输出,也可以保留为文本。

  3. 3

    复制 JSON

    可选择格式化或紧凑输出,复制到剪贴板,或下载 .json 文件。

限制与 Pro

XML 文件最大 100 MB;粘贴的 XML 不限大小,取决于浏览器能容纳的量。

关于 XML 转 JSON

当 API、政务网站或老旧的对接系统给你的是 XML,而你的代码需要 JSON 时,就可以用 XML 转 JSON。文档的根元素会成为唯一的顶层键,每个子元素成为一个属性;同一个父元素下出现多次的元素,会按文档顺序变成数组。

JSON 里没有属性这个概念,所以需要选择处理方式。默认把属性写成以 @ 开头的键,例如 <price currency="UZS">125000</price> 会变成 {"@currency": "UZS", "#text": 125000},这样属性和子元素不会混在一起,也能把 JSON 还原成相同的 XML。使用普通键,对象会更简短;如果属性只是用来存放辅助信息,也可以直接忽略。

关于值:开启类型识别后,42 和 3.5 会成为 JSON 数字,true/false 会成为布尔值;但凡按数字读取就会改变的内容仍保留为字符串,比如带前导零的邮编和账号,以及超过 15 位的数字。空元素会变成空字符串。

命名空间默认原样保留(如 dc:title),也可以去掉前缀让键名更简洁,同时会移除 xmlns 声明。选择“始终使用数组”后,所有子元素都采用相同的数组结构,适合有的记录只有一位作者、有的有三位作者的情况。

不会保留的内容:注释、处理指令和 DOCTYPE;像 XHTML 段落那样与行内标签混排的文本,会合并成一个字符串。

隐私

XML 由本页面的后台线程解析,不发出任何网络请求;不会获取 DTD 或外部实体,文档也不会离开你的设备。

XML 转 JSON:常见问题

JSON 里的 #text 是什么意思?
当元素既有属性或子元素,又有自己的文本时,文本需要单独的键,#text 是通用的约定。<title lang="en">Guide</title> 会变成 {"@lang": "en", "#text": "Guide"}。只有文本的元素则直接变成普通值,所以 <title>Guide</title> 就是 "title": "Guide"。
数字会被转换,还是保留为字符串?
开启“识别数字和 true/false”后,明显是数字或布尔值的内容会使用 JSON 对应类型。带前导零的值(如 007 或邮编)以及超过 15 位的数字会保留为字符串,因为转成数字会改变原值。关闭识别后,所有值都会原样保留为文本。
soap: 或 dc: 这类命名空间怎么处理?
默认前缀会保留在键名中,所以 dc:title 就是键 "dc:title",xmlns 声明会显示为 @xmlns 属性。开启“去掉命名空间前缀”后,键名变成 title,并且不再输出声明。不同命名空间若本地名相同,就会共用一个键,需要区分时请保留前缀。
之后可以把 JSON 再转回 XML 吗?
可以。在“JSON 转 XML”页面把目标切换为 XML:以 @ 开头的键会变成属性,#text 变成元素文本,数组变成重复元素。如果父元素内不同名称的子元素原本是交错排列的,顺序可能改变,注释也会丢失,但数据本身在来回转换后都会保留。
为什么出现错误提示而不是 JSON?
说明 XML 格式不正确,错误信息会显示第一个问题所在的行和列。常见原因有:应写成 &amp; 的 &、标签闭合顺序错误、属性值没有引号,或使用了 XML 没有定义的 HTML 实体(如 &nbsp;)。修正该处后重新粘贴即可。

此工具的其他用途