夜雨聆风学习资料网

ARTICLE · 1211760

为什么 AI 不肯收你的 Excel——说说 JSON 和 CSV

为什么 AI 不肯收你的 Excel——说说 JSON 和 CSV

我前阵子干了件挺蠢的事。

手头有一张 Excel 表,几百行数据,我懒得自己整理,随手甩给 AI,让它帮我归类汇总。AI 秒回。回的不是结果,是一句话:“请上传 csv 或 json 格式的文件。”

我盯着这行字看了好几秒。csv,json,六个字母,像一道门禁。表就在我手里,数据都是现成的,怎么就进不去呢?

后来我把这俩东西搞明白了,明白之后反而有点郁闷:它们简单得过分,我被六个字母唬住,有点丢人。今天讲清楚。

先给一句话版本

CSV 是逗号分隔的朴素表格,JSON 是贴满名标签的快递盒

它们都是“AI 能认的数据格式”,仅此而已。

在讲它们是什么之前,先拆两个误会。

第一个误会:这是程序员的东西,普通人不用懂。csv、json 这俩读音确实像某种神秘组织的代号,但真相是,你电脑上随便一张 Excel 表,点一下“另存为”,格式选 CSV,就产出一份。不写代码,不装软件。JSON 麻烦一点,也就是“一点”,在线工具分分钟生成。

第二个误会:csv 和 json 是同一个东西的两个名字,像土豆和马铃薯。不是的。一个是规规矩矩的表格,一个是贴了名字标签的包裹,长相、脾气、适用场景都不一样。把它们混为一谈,等于把 Excel 和快递柜混为一谈。

那它们长什么样?挨个看。

先看 CSV,全称 Comma-Separated Values,逗号分隔的值。名字已经把全部秘密说完了。举个例子:

csv

姓名,数学,英语

小明,90,85

小红,88,92

就这么个东西。一行一条记录,逗号把每一列切开。第一行是表头,交代每列装的是什么。你一眼能看懂,机器也一眼能看懂,它读到逗号,就知道该切一刀。一种格式能在人和机器两头都讨好,这事本身就少见,这是 CSV 活了半个世纪还没被淘汰的根本原因 [1]。

纯文本还有个隐藏好处:命长。一份七十年代存下来的 CSV,今天你拿记事本就能打开,一字不缺。它不认软件,不认操作系统,不认厂商,什么机器都读得了。那些依赖专门软件的私有格式就没这个命,软件一停更,文件就成了没人撬得开的保险箱。数据格式界的生存法则跟自然界差不多:活得久的往往不是最精致的,是最不挑环境的。

CSV 的身世也好玩。你去翻它的正式文档,会找到一份编号 RFC 4180 的文件,2005 年 10 月才发布 [1]。可这种格式上世纪七十年代就在用了,比自己的“出生证”老三十多岁。顺序是反的:大家先闷头用了几十年,各写各的,各存各的,直到 2005 年才有人站出来说,咱们定个规矩吧。先有习惯,后有规矩,欠账就欠在这儿:直到今天,不同软件对 CSV 的处理仍有差异,有的打开中文会乱码,有的对换行的理解不一样 [1]。

那份文档里还定了一条很务实的补丁规则。逗号是分隔符,数据本身带逗号怎么办?比如地址“北京市,海淀区”。答案是拿双引号把整个字段包起来。字段里还有双引号呢?写成两个双引号 [1]。没有高深理论,就是一层补丁摞一层补丁,这个格式就靠补丁运转了几十年。

再看 JSON,全称 JavaScript Object Notation,JavaScript 对象表示法。同样一批数据,写成 JSON 是这样:

json

{"姓名":"小明","数学":90,"英语":85}

每个值前面挂着一个名字,冒号连着,逗号分开,大括号包住。这叫键值对,键是名字,值是内容。CSV 是一张没有表头就看不懂的表;JSON 是每个格子都贴了名标签的快递盒,随手摸出一件东西,上面都写着它是什么 [2]。

JSON 有个 CSV 学不来的本事:嵌套。快递盒里还能装快递盒。小明的“地址”这个值,本身可以又是一个小包:{"省份":"北京","区县":"海淀"}。一层套一层,多复杂的关系都装得下。表格擅长表达平的东西,表达不了层级;真实世界的数据恰恰到处是层级,订单里有商品,商品里有规格,规格里有库存。所以 App 之间传数据,通用语言是JSON 而不是 CSV。

JSON 的身世从名字就能看出来:出身 JavaScript,是这门网页编程语言里写对象的写法。后来大家发现这套写法太好用,简单、紧凑,人和机器都能读,就把它单独拎出来做成了通用格式。2017 年那份编号 RFC 8259 的标准写得明白:JSON 是纯文本的,跟任何语言无关 [2]。它早就“叛逃”了原产地,成了整个互联网的数据普通话。

这门“普通话”的家当少得可怜。标准里规定,JSON 的值一共六种:文字、数字、是、否、空,外加两种容器——一种叫对象,就是前面说的键值对;一种叫数组,一串按顺序排队的值 [2]。撑起全部骨架的符号也只有六个:两个中括号,两个大括号,一个冒号,一个逗号 [2]。对比一下,英语词典收词几十万还年年更新;JSON 六种词六个符号,容器套容器,就能描述一份外卖订单、一整年的天气记录、一家公司全部员工的档案。

六种词、六个符号,跟你有什么关系?关系是:你天天在用,只是看不见。你手机上的 App 跟服务器之间来回传的东西,天气、外卖订单、聊天记录,绝大多数就是 JSON。你打开外卖 App,商家列表刷出来的那一瞬间,背后就是一串 JSON 从服务器飞奔过来,六个符号列队站好,把几十家店的名字、评分、距离、配送费挨个报上来。它藏得太好,你从没意识到它在那儿。看不见的东西,就看它造成的效果:你手机上每一次刷新、每一条消息、每一笔下单,都是它路过的痕迹。

回到开头那道门禁。为什么 AI 工具的“导入”按钮里,躺着的往往是 csv 和 json?不是 AI 挑食。Excel 文件里除了数据本身,还塞着格式、公式、合并单元格、颜色样式一大堆行李,AI 读起来又慢又容易误会。一个合并单元格,人看着是排版美观,机器看着是歧义现场。csv 和 json 是纯文本,一个逗号一个坑,一个标签一个值,没有歧义。AI 要的不是好看的表,是没有歧义的表。

所以你不用会写这两种格式。你只需要记住一个动作:Excel 里点“另存为”,格式选 CSV,存出来的文件 AI 直接就能吃。一个动作,打通数据进 AI 的第一关。那六个字母不是门槛,是门把手。

最后辟两个谣。

第一个:“直接把 Excel 文件喂给 AI 就行。”多数情况下不行。现在一些 AI 工具确实开始支持直接读 Excel,但稳定性远不如 csv 和 json,数据一大、表一复杂就容易出错。想稳,就另存为 csv 再喂。

第二个:“JSON 比 CSV 高级,能用 JSON 就别用 CSV。”工具鄙视链思维,不成立。这俩没有高低,只有合不合适,判断方法很朴素:看数据是什么形状。规规矩矩的二维表,行列分明,用 CSV;有层级、有嵌套、结构不规整,用 JSON。是看数据的形状选格式,不是看格式的高级程度选数据。

CSV 是给 AI 看的表格,JSON 是给 AI 看的带标签的快递

下次再有工具跟你说“请上传 csv 或 json”,你就明白了,它不是把你挡在门外,是抬手指了指门在哪儿。

下期聊另一个天天见却说不清的东西:API,看看 App 之间到底是怎么“说话”的。

最后,感谢你读到这里。如果觉得有帮助的话,麻烦点下关注👇

让我们一起学习,一起进步。

参考文献

[1] Shafranovich Y. Common format and MIME type for comma-separated values (CSV) files: RFC 4180[S/OL]. 2005.

[2] Bray T. The JavaScript Object Notation (JSON) data interchange format: RFC 8259[S/OL]. 2017.

相关学习资料