XML 转 JSON Extensible Markup Language ↔ JavaScript Object Notation 免费 在线 安全
放进一个 XML 文件,带走 JSON。读和写都在这里、在你的浏览器里完成,文件不离开你的设备——这趟转换保住了什么、保不住什么,下面都写着,不用你自己去发现。
转换你的文件
把 XML 文件拖到这里,或者选一个。
你的文件不会离开这台设备。一切都在你的浏览器里完成。
不上传任何文件
从 XML 转换
转换为 XML
这些格式从哪里来
CSV 最古老,也最缺乏规范:把一张表写成一行行文字,自1970年代起就在用,直到2005年才被形诸文字;那时每个程序早已各自认定了分隔符是什么、引号何时该加。XML 于1998年自 SGML 长出,供那些必须携带严格结构、并要照着模式检验的文档使用。JSON 是道格拉斯·克罗克福德约在2001年从 JavaScript 里抽出来的,刻意削减到只剩对象、数组、数字和字符串——正是这份简省让它拿下了整个网络。YAML 是它可读的表亲,缩进在那里做着别处由括号来做的事。彼此转换时只有一件事要紧:CSV 是平的,是行与列的网格;而 JSON、XML、YAML 都是树。
你会在哪里遇到它们
CSV 是电子表格导出的东西,也是会计、网店平台或银行对账单递到你手上的东西。JSON 是网络服务彼此交谈所用,配置文件也越来越用它来写。XML 存活在较旧的企业系统里、发票规范里,以及办公格式自身的内部。YAML 是人们用手写设置的地方。在它们之间转换,就是每天把数据从它诞生的地方搬到它被需要的地方。
常见问题
我的 CSV 在 Excel 里打开成了一列。为什么?
因为你的电子表格等的是另一种分隔符。Excel 依照计算机区域设置里的列表分隔符;凡是逗号已经充当小数点的地方,那个分隔符就是分号——也就是欧洲大陆的大部分地区。此时一个以逗号分隔的文件看上去就是一列文字。请用导入对话框并明确指定分隔符,而不要双击打开文件。3.5 有时变成一个日期,也出于同一个区域设置。
为什么我层层嵌套的 JSON 变不成一张整齐的表格?
因为表格是平的,而 JSON 是一棵树。一行每列只放得下一个值;一个 JSON 对象却能在某个字段里的列表里再套一个列表。转换意味着要选择如何把它拍平:要么把嵌套的名字接成一个很长的列标题,要么把父行按子项的个数重复若干次。两者都是让步,而且都无法自动还原——所以从表格回到原来的形状,通常需要一个人来做决定。
文件会损失质量吗?
要看两种格式各自装得下什么。在存放同样内容的格式之间转换——PNG 转 BMP,WAV 转 FLAC——不会损失任何东西。转成为省空间而丢弃信息的格式,比如 JPEG 或 MP3,每转一次就损失一点,再转回去也拿不回来。凡是有选择余地的地方,本页倾向于保住原来的质量,而不是做出最小的文件。
我的文件会被上传到什么地方吗?
不会。转换发生在你自己的机器上、你的浏览器里面;文件从不离开它,这里也没有任何服务器能够接收它。正因如此,限制一个大文件的是你自己的内存而不是上传;也正因如此,你转换的任何东西都不可能出现在任何人的日志里——包括我们的。不过,音频和视频工具会在你第一次使用时从本站取来它们的转换引擎——约三十兆字节,仅此一次;此后工作依然完全在你自己的机器上进行。
人们为什么把 XML 转成 JSON
XML 是结构化数据中的元老。二十多年来,它承载着配置文件、产品数据源、发票、站点地图、新闻源、会计程序的导出文件以及较旧网络服务的响应。它精确而冗长,用开合的标签书写。JSON 是它年轻的对手:更轻、更易读,是现代网络代码的自然语言,程序几乎不需要准备就能使用它。当数据源或导出文件以 XML 到达,而要使用它的东西说的是 JSON 时,就需要转换。这就是人们把 XML 转成 JSON 的原因:他们的数据是旧的形式,而新的工具想要新的形式。
这些场景很常见。开发者必须在现代脚本中读取较旧服务的响应。店主有一份 XML 的产品数据源,而平台导入 JSON。数据分析师想在处理 JSON 的工具中查看一个很大的导出文件。学生需要弄懂一份满是尖括号的文件。在每种情况下,信息都在,缺的只是一种更方便的形式。
本页在您的浏览器中把 XML 转成 JSON。您的文件在这里被读取和写出,所以它从不离开您的设备,这对发票、客户数据和任何其他私密内容很重要。而且本页会提前告诉您这次跨越保留什么、不能保留什么,而不是让您自己去发现。XML 持有一个 JSON 没有对应说法的概念,理解它会让您免于意外。下面您会看到转换如何进行以及该预期什么。
转换如何进行
元素变成键,嵌套变成嵌套
您的 XML 在浏览器内被读取。元素名称变成键,元素内部的元素变成对象内部的对象,所以 XML 的嵌套就是 JSON 的嵌套。您在标签中看到的结构,就是您在大括号中得到的结构。
属性用 @ 保留其名称
XML 元素可以带有属性,即写在开始标签内的小块数据。JSON 没有属性,所以每个属性都作为自己的键保留,名称前加 @。像带有属性 id 的 book 这样的元素,会在其子元素的键旁边给出一个键 @id。@ 使人清楚哪些键来自属性,哪些来自元素。
与子元素并存的文本
与子元素共处一个元素的文本保存在 #text 之下,因为没有别的地方可放。这在数据文件中很少见,在把散文与标记混合的文档中很常见。键 #text 存放文本,其他键存放子元素。
保留什么
元素名称、嵌套、属性和文本
元素名称、它们的嵌套、它们的属性和它们的文本全部被保留。数据中的信息就在 JSON 里,以程序可以遍历的形式。
只出现一次的东西的顺序
当元素不同时,它们保持被书写的顺序,所以列出标题、作者和日期的记录按那个顺序显示它们。
文本原样保留
每个元素的文本按书写的样子保留,包括其中的空格以及带重音的字母、符号和其他文字的字符。
在您把 XML 转成 JSON 之前应当知道的事
重复的名称变成数组
XML 持有一个 JSON 没有对应说法的概念:元素是有序的,而且可以重复。只出现一次的名称变成一个值,出现两次的名称变成一个数组。所以有三个 item 元素的列表变成三个元素的数组,但只有一个 item 的列表只变成一个值,而不是一个元素的数组。这意味着把结果读回去不一定得到同样的 XML。读取 JSON 的程序在列表可能很短的地方应当为两种形式做好准备。
注释、处理指令和声明被丢弃
注释、处理指令和 XML 声明不是数据的一部分,不会被带过去。开发者留在注释里的说明、顶部说明版本和编码的那一行、以及针对特定程序的指令都会消失。数据本身保留。
一切都是文本
XML 没有类型:标签中的每个值都是文本。您 XML 中的数字、日期和标志,以被书写的文本到达。读取 JSON 的程序应当按自己的需要来解释它们。
如何在这里把 XML 转成 JSON
添加您的文件
把 XML 文件拖到页面上,或从您的设备中选取。它在浏览器内被读取,不会上传。
转换
按下按钮。普通大小的文件只需片刻。请保持页面打开直到完成。
下载并检查
下载 JSON 并在文本编辑器中打开。看一看开头和结尾,检查键是您期望的名称,属性带着它们的 @。
仔细看看 XML 和 JSON
书写树的两种方式
XML 和 JSON 都描述一棵值的树。XML 用开合的标签书写它,并允许属性和混合内容。JSON 用大括号和方括号书写它,只知道对象、列表、字符串、数字、布尔值和 null。它们在数据上重叠得很好,例如记录和设置;在文档上重叠得很差,例如网页或书,那里文本和标记交织在一起。
为什么往返不能保证
从 XML 到 JSON 会损失一点东西:重复的混合元素的顺序、注释,以及属性与元素之间的区别,后者只通过 @ 保留。因此,变回去时您可能得不到完全相同的 XML。对数据交换来说,这很少要紧。对文档来说就要紧了,最好把 XML 保留为母版。
命名空间
XML 名称可以带有一个前缀,把它们放进一个命名空间,例如某个特定标准的词汇表。这样的名称按书写的样子保留,前缀包括在内,所以键可能读作 dc:title。它们不会被解析或改写。
详细看常见情形
产品数据源与目录
供应商和市场平台常常提供 XML 的数据源。要在现代脚本中使用它们,或把它们导入接受 JSON 的平台,请把 XML 转成 JSON 并读取结果。
较旧的网络服务
在 SOAP 和早期 API 时代建立的服务以 XML 响应。想使用其响应的脚本可以处理 JSON,它更容易处理。
配置与设置文件
许多程序把设置存为 XML。把文件转成 JSON,让您可以在为 JSON 构建的工具中读取它、比较两个版本或把它喂给脚本。
数据源、站点地图与导出文件
新闻源、站点地图以及会计或库存程序的导出文件都是 XML。转换给您一种更容易搜索、更容易在代码中加载的形式。
把 XML 转成 JSON 之前的实用建议
检查 XML 是否格式良好
每个标签都必须闭合,文件必须有单一的根元素。如果页面报告错误,请在能高亮 XML 问题的编辑器中打开文件,并修复它指出的那一行。
知道列表可能很短的地方
如果您的 XML 有列表,请记住只有一个条目的列表会变成一个值,而不是一个元素的数组。请规划读取 JSON 的代码,以处理这两种情况。
决定如何处理属性
属性以带 @ 的键到达。如果您的程序期望它们使用其他名称,请在转换后重命名它们,或调整程序。
大文件
一切都在您的设备上运行,所以很大的文件需要内存。对于有许多兆字节的文件,请使用电脑,如果页面吃力就拆分数据。
转换之前人们常问的问题
为什么一个列表是数组而另一个是单个值?
因为只出现一次的名称变成一个值,出现两次的名称变成一个数组。只有一个条目的列表看起来像单个值。
我的属性去哪了?
它们是名称前带 @ 的键,在子元素的键旁边。
与其他元素并存的文本在哪里?
在键 #text 之下,因为没有别的地方可放。
为什么我的注释不见了?
注释、处理指令和 XML 声明不是数据的一部分,不会被带过去。
我的文件会被上传吗?
不会。转换在您的浏览器中运行,文件从不离开您的设备。
我可以变回 XML 吗?
可以。JSON 转 XML把树写回 XML,尽管往返不保证完全一致。
把 XML 转成 JSON 时的明智选择
JSON、YAML 还是表格?
JSON 适合程序。对于人们编辑的配置,JSON 转 YAML在转换后读起来更舒服。如果 XML 其实是一张统一记录的表格,您可以接着用JSON 转 CSV或JSON 转 XLSX。
保留 XML
XML 是母版。它保存着注释、声明和准确的顺序。请保留它,并把 JSON 当作方便的副本。
想想使用者
看看是什么会读取 JSON,并让工作适合它。如果 XML 很规整,期望固定结构的脚本就更容易编写。
转换之后得到好结果
在查看器中验证 JSON
在能理解 JSON 的编辑器中打开结果并折叠对象。如果结构看起来像您期望的,它就是健全的。
把几条记录与来源比较
取中间的几条记录,对照 XML 检查。这只需一分钟,并告诉您转换是忠实的。
为发布而压缩
如果文件将被网页加载而且很大,有工具可以去掉空白让它变轻。数据保持不变。
准备好 XML 以便顺利转换
保持结构规整
当您把 XML 转成 JSON 时,规整的数据转换得最好:相同的元素在相同的位置,列表总是写成重复的元素。不规整的文件产生不规整的 JSON,而读取它的程序必须应付。
尽量避免混合文本和元素
与子元素并存的文本放在 #text 之下。这是正确的,但让结果更难使用。对于数据,请把文本放在叶子里,而不是分支之间。
先用一小块测试
如果您的文件很大,请把最初的几条记录放进一个测试文件并转换它。快速看一眼结果,就能显示形状是否是您期望的。
把 XML 转成 JSON 之后阅读 JSON
遍历结构,而不是猜测它
结果的形状映照 XML 的形状,所以理解它的最好办法是把两者并排打开。找到根元素,它成为顶层的键,然后沿着一条记录往下走到它的叶子。在您把 XML 转成 JSON 之后,这十分钟的遍历能省去代码中数小时的反复试错。
为列表编写防御性代码
因为单个条目是值而多个条目是数组,最安全的习惯是包装您读取的东西:如果它不是数组,就把它放进一个数组。读取器开头的一行代码使其余部分变得简单,您的程序不会再在数据源只含一个产品的那天出错。
谨慎处理属性
以 @ 开头的键是属性。有些工具不喜欢这样的名称作为属性名,所以您可能更愿意在加载时重命名它们。含义不变;只有标签改变。
不要把编辑 JSON 当作源头的替代
当数据改变时,请在源头改变 XML,或让系统产生新的导出,然后再次把 XML 转成 JSON。编辑副本会让两者脱节。
隐私与处理
为什么本地转换对数据很重要
XML 文件常常存放私密的内容:发票、客户、订单、设置。许多在线转换器会把您的文件上传到服务器,处理后送回结果,有一段时间一份副本存在于您无法控制的机器上。在这里,是您自己的浏览器在工作,所以数据留在您的设备上。
您离开时会发生什么
当您关闭页面时,转换后的文件会从浏览器中消失,所以请先下载它。关于您的数据,没有任何东西被保留。
如果出了问题
页面说 XML 无效
可能是某个标签没有闭合,或有两个根元素,或有 XML 不允许的字符。请在能高亮 XML 错误的编辑器中打开文件,并修复它指出的那一行。
结构不是我期望的
检查只有一个条目的列表,以及属性和混合文本。它们解释了大多数意外。
页面因很大的文件而卡住
一切都在您的设备上运行,大文件需要内存。请在电脑上重试,或拆分数据。
相关工具
同一系列的工具涵盖相邻的工作。要变回去,请用JSON 转 XML。对于配置文件,JSON 转 YAML和YAML 转 JSON在这两者之间转换。对于表格,有JSON 转 CSV、CSV 转 JSON、JSON 转 XLSX和XLSX 转 JSON。
一个实际例子
假设一位供应商给您发来一个含有 800 种产品的 XML 产品数据源,每个产品有 id 属性、名称、价格和一个分类列表。您把文件拖到这里并按下按钮。片刻之后您下载一个含有 800 种产品数组的 JSON。每个产品的 id 是键 @id,名称和价格是各自的键,分类构成一个数组。对于少数只有一个分类的产品,值是一个普通字符串,而您的导入脚本处理了两种情况。XML 作为供应商的原件留在您的文件夹里。
一份简短清单
转换之前
检查 XML 格式良好。记下列表可能很短的地方。保留 XML。
转换之时
留在页面上直到文件准备好。
转换之后
打开 JSON,检查键、属性和列表,并用将要读取它的程序测试它。
常见错误
以为每个列表都是数组
只有一个条目的列表会变成一个值。请把读取代码写成两者都接受。
指望完美的往返
不要指望从 XML 到 JSON 再变回去会得到同样的 XML。保留原件。
忘了所有值都是文本
XML 没有类型。请在使用它们的程序中转换数字和日期。
您的数据留在您的设备上
转换在本地进行。您的文件由您自己的浏览器读取,在那里重写并以 JSON 交还给您。没有任何东西被上传,所以服务器上不会留下副本,也没有别人能读到它。对于含有私密内容的数据,这是把 XML 转成 JSON 的安全方式。
小结
要在这里把 XML 转成 JSON,拖入文件并按下按钮。它在您的浏览器中被读取和写出,所以文件从不离开您的设备。元素名称、它们的嵌套、它们的属性和它们的文本都被保留。属性保留其名称并在前面加 @,与子元素共处一个元素的文本保存在 #text 之下,因为没有别的地方可放。XML 持有一个 JSON 没有对应说法的概念:元素是有序的,而且可以重复。只出现一次的名称变成一个值,出现两次的名称变成一个数组,所以把结果读回去不一定得到同样的 XML。注释、处理指令和 XML 声明不是数据的一部分,不会被带过去。