跳到主要内容
ConvertOwl
格式阅读需 1 分钟作者 ConvertOwl

CSV 与 JSON:该用哪一个,为什么?

用大白话讲清 CSV 和 JSON 的区别:结构、可读性,以及你的数据到底该用哪种格式。

像素风格的猫头鹰站在一个 CSV 表格文件和一个 JSON 代码文件之间,在夜空下权衡该选哪一个

导出一份报表,得到的是 .csv 文件。请求一个 API,返回的是 .json 数据。两者本质上都只是承载数据的文本文件,为什么长得如此不同?为什么用哪一种会影响后续的一切?答案很简单:CSV 是一张平面表格,JSON 是一棵树,这一个结构上的差异,几乎决定了该选谁的全部逻辑。

如果你手头已经有文件,只是想转换成另一种格式,我们的 CSV 转 JSON 工具JSON 转 CSV 工具 可以在浏览器里瞬间完成转换,不需要上传文件。这篇文章要讲的,是这个选择背后的"为什么"。

CSV 到底是什么#

CSV(逗号分隔值)说白了就是行和列,没别的了。每一行是一条记录,每个逗号分隔一个字段,第一行通常是给每一列命名的表头:

name,age,city
Alice,29,Boston
Bob,34,Denver

格式就这么简单。CSV 没办法把一条记录嵌套进另一条记录里,也没有标准方式表达"这个字段其实是三个值组成的列表",更没有标准方式标注一个值的类型:29"29" 在 CSV 里看起来一模一样,所以每个读取它的程序都得自己猜这是数字还是文本。CSV 的优势恰恰在于这种简单让它变得通用易读:Excel、Google 表格、Numbers,还有几乎所有数据库的导入工具,不需要任何配置就能直接识别它。

JSON 到底是什么#

JSON(JavaScript 对象表示法)用嵌套的对象和数组来表示数据,并且带有明确的类型:

{
  "name": "Alice",
  "age": 29,
  "city": "Boston",
  "hobbies": ["reading", "hiking"]
}

注意这里 CSV 做不到的事:hobbies 是一条记录内部的一个列表;age 毫无歧义地是个数字;如果还需要一个 address 字段,里面再嵌套 streetzip,JSON 也能自然地做到嵌套。这正是 JSON 成为 API 默认格式的原因:现实世界的数据(一个用户可能有多个电话号码,一笔订单可能有多个商品行)很少是平面的,而 JSON 能直接描述这种结构。

核心权衡#

CSVJSON
结构只有平面的行和列嵌套的对象和数组
数据类型没有,一切都是文本字符串、数字、布尔值、null、数组、对象
人类可读性在表格软件里非常清晰小文件还行,大文件会很乱
最适合用什么打开Excel、Google 表格代码编辑器或 JSON 格式化工具
常见来源数据库导出、电子表格、分析报表API、配置文件、应用数据
同样数据的文件大小更小,字段名不会重复更大,每条记录都要重复一遍字段名

最后一行常常让人意外:因为 JSON 在每条记录里都要重复 "name":"age":"city": 这些字段名,同样一张表如果用 JSON 存,通常会比 CSV 大 30% 到 50%。这些多出来的体积换来的是结构和类型信息;如果你手上只是一张平面表格,这笔开销就白花了。

什么时候该用 CSV#

  • 要把文件交给不懂技术的人。 任何人打开 CSV 用 Excel 都能立刻看懂;JSON 文件在大多数人眼里就是一堆代码。
  • 数据本身就是平面的。 客户名单、销售报表、库存清单:一条记录对应一行,不需要嵌套。
  • 要导入表格软件或传统的数据库表。 两者本来就是按行和列设计的,CSV 天然契合。
  • 文件大小很重要,数据又比较简单。 没有重复的字段名,同样的信息文件更小。

什么时候该用 JSON#

  • 数据的结构没法干净地压成平面。 一笔有多个商品行的订单、一个有多个地址的用户、一个带嵌套分区的配置文件。
  • 要和 API 打交道。 几乎所有现代 Web API 都以 JSON 收发数据,这早已是事实上的标准格式,硬要把一切都塞进 CSV 通常只会带来更多麻烦。
  • 类型对程序很重要。 如果代码需要在不额外解析的情况下就知道 29 是数字而不是字符串 "29",JSON 本身就带着这个信息。
  • 需要表示 null 或可选字段。 CSV 没有干净的方式表达"这个字段在这里不适用";JSON 内置了 null

两者之间的转换#

没有哪种格式是全面胜出的,所以在两者之间来回转换是家常便饭,不是权宜之计。几个常见场景:

  • 拿到的是 API 返回的 JSON,但需要在 Excel 里打开?JSON 转 CSV。深层嵌套的字段(对象里套着数组)会尽量被展平,所以对嵌套超过一层的输出要检查一下。
  • 表格导出成了 CSV,但要喂给一个需要 JSON 的应用? CSV 转 JSON 会用表头作为字段名,把每一行转成一个对象。
  • 只是想读懂或整理一个乱糟糟的 JSON 文件? JSON 格式化工具 会为它加上缩进并做校验,让嵌套结构真正可读,而不是挤成一整行。

这三个工具都完全在浏览器里运行:数据在你拿到转换结果之前不会被上传到任何服务器,如果文件是客户名单之类的敏感信息,这一点尤其重要。

常见问题#

JSON 是不是永远比 CSV 好? 不是,JSON 更适合嵌套或带类型的数据,但对于简单的平面表格,CSV 体积更小、在表格软件里打开更方便,而且不需要任何技术工具人人都能看懂。

所有 CSV 文件都能干净地转成 JSON 吗? 可以,因为一张平面表格总能对应成一个由平面对象组成的列表,每行一个对象,表头提供字段名。

所有 JSON 文件都能干净地转成 CSV 吗? 不一定:如果 JSON 在某个字段里嵌套了对象或数组,就得先展平或简化才能塞进行和列里,这个过程中一些结构可能会丢失,或者被压缩进单个单元格。

为什么我的 JSON 文件比对应的 CSV 大这么多? 因为 JSON 在每一条记录里都要重复一次字段名(比如 "name":),而 CSV 只在表头里写一次列名,所以同样的表格转成 JSON 通常会大 30% 到 50%。

API 实际上用的是哪种格式? 绝大多数现代 Web API 默认收发的都是 JSON,因为它能天然表示真实应用所处理的那种嵌套、带类型的数据。

打开这两种文件需要专门的软件吗? 不需要:CSV 可以直接用 Excel、Google 表格或 Numbers 打开,JSON 用任何文本编辑器都能打开,不过遇到大文件时,专门的 JSON 格式化工具 会让阅读轻松很多。

一句话总结#

  • CSV 是一张平面表格: 只有行和列,没有嵌套,没有类型,在表格软件里人人都能看懂。
  • JSON 是嵌套的、带类型的结构: 专为无法干净压平的数据而生,也是 API 的默认格式。
  • 没有哪个格式"更好",它们是为不同形状的数据设计的,该选哪个要看你接下来打算拿这份数据做什么。
  • 在两者之间转换很平常:试试 CSV 转 JSONJSON 转 CSVJSON 格式化工具,全部免费,并且都在你的浏览器本地运行。想看更多这类格式对比,可以逛逛博客的文件格式板块

试用这些工具

免费、私密、即时 - 一切都在你的浏览器中运行。

像素风猫头鹰在篝火旁比较 MKV 文件的高画质和多编码器支持,与 MP4 文件的广泛兼容性和更小体积
格式1 分钟

哪种视频格式画质更好?

从画质角度对比 MP4、MOV、WebM 和 MKV:编码器、码率和分辨率才是关键,而不只是兼容性。