跳到正文
简体中文
工作台什么都不上传的工具
ODERSA 协会的一间工坊什么都不外传,什么都不留存,什么都到不了我们手里。

工坊 · CSV 和 JSON

怎么用 : CSV 和 JSON

有一件事几乎没人说:“CSV 格式”并不是一项标准。它那份参考文档标着“仅供参考”,而且文档自己就写着,各家实现之间存在相当大的差异。所以这件工具会把分隔符量出来,而不是猜,并且把量到的结果告诉您。

打开工具

转换的方向是从您粘进来的东西推断出来的:以花括号或者方括号开头的是 JSON,其余一律当 CSV。这跟本站加密保险箱和加密 PDF 的思路是一样的:不去逼您选一个您并不了解的模式。

CSV 是一种没有标准的格式,而几乎所有麻烦都源于此。它那份参考文档标着“仅供参考”,而且文档自己就写着,各家实现之间存在相当大的差异。在欧洲的表格软件里,分隔符是分号,因为那边的逗号是小数点。所以工具会把分隔符量出来:它把四个候选都试一遍,留下那个让列数最整齐的,然后把选中的那个显示给您。

参考文档的规则被逐条照办,包括一半的转换器都做不对的那一条:被引号包住的字段里可以有换行。正因如此,读取器是一个字符一个字符往前走的,而不是先按行切开。被包住的字段内部的引号要写成两个,反方向转换时工具也照此写出来。

怎么用

  1. 把您的 CSV 或者 JSON 粘进来。工具会认出是哪一种,并显示转换的方向。
  2. 核对一下它量出来的分隔符和第一行表头。能骗过一个转换器的,就只有这两件事。
  3. 把结果复制走或者下载下来。表格会告诉您读到了多少行、多少列。

支持的格式

方向从文字本身推断。JSON 必须是一个对象数组,才能给出一张二维表:而这正是绝大多数导出功能产出的形态。

CSV 格式的文字

分隔符从逗号、分号、制表符和竖线里量出来。带引号的字段、成对写的引号,以及字段内部的换行都能正确处理。

JSON 格式的文字

一个对象数组会变成每个对象一行、遇到的每个键一列。嵌套的值会以 JSON 的形式写进它那个单元格,工具会把这件事指出来。

查看兼容性对照表

它的限制

CSV 没有标准,而工具不会假装有

2005 年那份参考文档归类为“仅供参考”:它描述的是一种观察到的用法,并没有把它标准化,而且文档自己就写着,各家实现之间存在相当大的差异。实际后果是:一个软件收得下的文件,另一个可能不收,而这不是谁的错。工具照这份文档的规则来做,并把量到的东西显示出来,好让您自己判断。

多层嵌套的 JSON 不会变成多层的 CSV

CSV 是一张平表:二维,不是三维。当一个值本身是对象或者列表时,工具会把它以 JSON 的形式写进那个单元格并告诉您,这样既留住了信息,也不假装已经把它铺平了。替您挑一套铺平的约定、再造出一堆列名,那是一个不该由我们来做的决定。

把数字识别成数值这一项是可选的,它可能毁掉一个编号

一个以零开头的邮政编码、一个电话号码、一个十九位的编号:一旦被当成数值,它们就丢掉开头的零或者末尾几位。这个勾默认是打上的,因为一份测量数据本来就该这么处理;但如果是一份编号清单,请把它取消勾选,这样全部按文字保留。

CSV 的字节序标记是可选的,而这不是随便加的

有一款很常见的表格软件,只有当文件以这个标记开头时,才会正确显示 UTF-8 的 CSV:它自己的文档就是这么写的。没有它,中文和重音字母会变成一串怪符号。可同样这个标记又会让另一些程序出错,它们会把它读成第一个字段里的一个字符。这里没有放之四海皆准的选择:所以有这个勾,理由就写在旁边。

关于这个工具的问题

我的数据会被发到什么地方吗?

不会,而且这一点很要紧:一个 CSV 文件几乎总是真实数据的导出,里面常常有姓名和地址。三十秒就能验证:按 F12 打开开发者工具,切到“网络”标签页,清空列表,然后把文件粘进来转换一次。一行都不会冒出来。把网断掉再做一遍。

我的 CSV 用的是分号,这有问题吗?

没有,而且这在欧洲还是最常见的情况。因为那边的逗号是小数点,表格软件就用分号来分列。工具会把四种可能的分隔符都试一遍,留下那个让列数最整齐的,然后告诉您它选了哪一个。如果它量错了,就在下拉列表里自己指定。

我的邮政编码开头的零没了。

把“把看着像数字的内容识别成数值”取消勾选。邮政编码、电话号码、账号都不是数值:它们是一串数字,被当成数值就会丢掉开头的零。这个勾默认是打上的,因为一份测量数据本来就该这么处理,但取消它只要点一下,之后全部按文字保留。

为什么我用表格软件打开 CSV 时中文是乱码?

因为有一款很常见的表格软件,只有在文件以字节序标记开头时才认得出 CSV 里的 UTF-8:这写在它自己的文档里。把加这个标记的勾打上,再重新打开文件。反过来也要留神:同样这个标记会让某些程序出错,它们会把它读成第一个字段里的一个字符。这里没有放之四海皆准的选择,只有适合去处的那个选择。

我的 JSON 里对象套着对象。这个结构会怎么样?

它会被保留,但以 JSON 的形式写在单元格内部,而且工具会告诉您。CSV 是一张二维的平表:没有一种通用的办法能把三层结构塞进去。相关的约定是有的,它们会造出像“adresse.ville”这样的列名,而每一种都是武断的选择。我们宁可把您的数据原样留住,并告诉您它在哪儿。