CSV转JSON

在你的设备上运行 · 你的文件从不离开你的设备。

拖入导出的.csv或粘贴文本,得到一个JSON列表——一行一个对象,表头就是键名。解析遵循RFC 4180:带引号的字段、成对的双引号、单元格里的逗号和换行都原样保留。

列分隔符在逗号、分号、制表符和竖线中自动识别——用分号的导出文件不用任何设置就能转——也可以手动指定。默认“12”变成数字12,“true”变成布尔值,空单元格变成null——但只在什么都不会改变时才这样:1.50、1e3、007和很长的ID保持文本,因为变成数字后会写回成别的样子。关掉这个开关,每个值都保持原来的文本。

重复或空白的表头会自动起唯一的名字(column_3),字节顺序标记(BOM)会被去掉;存为UTF-16或旧代码页的文件会按实际编码读取并注明;单元格比表头多的行会报告所在行号;解析出错时会告诉你在第几行第几列,而不是一句含糊的提示。下载前可以预览前200行。

如何CSV转JSON

  1. 拖入CSV文件,或者把CSV文本粘贴到文本框。
  2. 分隔符保持自动识别或手动选择;决定要不要识别数字和布尔值。
  3. 点击“转换为JSON”,看一下预览。
  4. 下载.json。

支持的格式与限制

输入
CSV/TSV(.csv、.tsv、.txt)——文件或粘贴的文本
输出
JSON对象数组,带缩进,UTF-8
解析
RFC 4180:引号、字段内的分隔符和换行
分隔符
自动识别:逗号、分号、制表符、竖线
运行位置
在浏览器本地完成,不上传

不适用于: 还原嵌套结构——CSV是扁平的,每一行变成一个扁平对象;带点的列名不会重新嵌套。

类型识别到底改了什么

开关打开时,一个单元格只有在变成数字后还能写回同样的文本,才会变成数字:12、-4和3.5变成数字。1.50、1e3和-0保持文本,因为变成数字后会写回成1.5、1000和0。007、+5、" 12"、3,5、1,250、带百分号或货币符号的值,以及长到数字无法精确保存的ID,也都保持文本。

true和false不分大小写都能识别,所以TRUE变成true。空单元格变成null,但单词NULL保持文本,因为它也可能是一个值或一个名字。2024-01-05这样的日期始终是文本。

比表头短或长的行

单元格按位置和表头对应。单元格少的行,缺的那几列得到null(关掉类型识别时是空字符串)。单元格比表头多的行,多出来的没有地方放,会被略去;预览上方的提示会说明有多少行出现这种情况,以及第一处从第几行开始。这通常说明某个值——比如Smith, John——含有分隔符却没加引号。

空行会跳过。表头名两端的空格会去掉;值不会,所以" Cairo"保留它的空格。

引号怎么读,报错指向哪里

只有作为字段的第一个字符时,引号才开始一个带引号的字段;在中间,比如5" screen,它就是文本的一部分。一个字段用引号开头却始终没有闭合,会把文件剩下的全部内容吸进一个单元格,所以转换会停下来,并给出这个引号开头处的行号和列号。

分隔符识别和文件编码

识别时看前64 KB、最多50行,选出在最多行里给出相同列数的分隔符;引号里的分隔符不计。在用小数逗号的分号文件里,比如A;1,5,会找到分号,1,5保持文本。

文件按它的字节实际是什么来读:字节顺序标记(BOM)、UTF-16(Excel称之为“Unicode文本”)或UTF-8。字节不是有效的UTF-8时,会改用能让它们读成文字的旧代码页:西欧和中欧、西里尔、希腊、土耳其、希伯来、阿拉伯(含波斯文和乌尔都文)以及泰文的Windows代码页,或者中文、日文和韩文的GB18030、Big5、Shift_JIS和EUC-KR。这时文件那一行会写明,比如“按 windows-1256 读取,不是 UTF-8”;很短的文件可供判断的字母少,请看一下它的预览。

常见问题

我的文件会上传到服务器吗?
不会。转换完全在你的浏览器里完成,用的是你自己设备的算力。文件不会离开你的电脑或手机;每个工具用过一次之后,断网也照样能用。
数字、布尔值和空单元格怎么处理?
打开“识别数字、布尔值和空单元格”后,12和3.5变成数字,true/false变成布尔值,空单元格变成null。只有写回时完全一样的值才变成数字,所以1.50、1e3、带前导零的值(007)和很长的ID都保持文本,不会被悄悄改掉。关掉开关则所有值都是文本。
我的文件用分号或制表符分隔,需要设置吗?
不需要。分隔符会从文件开头几行自动识别。猜错了的话,从列表里手动选一个。
单元格里有逗号或换行怎么办?
这正是引号的作用,解析器严格按标准处理:用引号包起来的字段里可以有分隔符、换行和成对的双引号。

相关工具

表格与数据中的更多工具

本页的其他语言版本: English · العربية · Deutsch · Français · Español · Русский · Português · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা