如何将 JSON 转换为 CSV,方便在 Excel 和 Google Sheets 中使用
JSON 和 CSV:为不同任务而生
JSON 和 CSV 完全是为不同的世界而构建的。JSON (JavaScript Object Notation) 用于表示结构化的层级数据。它可以轻松处理嵌套对象、数组中的数组以及混合数据类型,因此成为了 API 和应用程序配置的标准格式。而 CSV (Comma-Separated Values) 则正好相反:它就是一个简单的平面表格。每一行都必须有相同数量的列,并且没有嵌套。这种根本性的差异意味着你不能简单地把 .json 文件重命名为 .csv 就指望它能用。 当你从 REST API 获取数据时,比如从 CRM 系统中获取 500 条客户记录,你几乎总是会得到 JSON 格式的数据。单条客户记录可能看起来是这样的: {"id": 1042, "name": "Sara Okonkwo", "email": "sara@example.com", "orders": [{"id": 88, "total": 49.99}]} Excel 和 Google Sheets 无法将这种文件解析成一个整洁的表格。它们需要的是扁平化的行。将 JSON 转换为 CSV 就是一座桥梁,它让分析师、市场营销人员和运营团队能将 API 数据导入到他们日常使用的电子表格工具中。如果你的 JSON 是一个简单的对象列表,转换会很容易。但一旦涉及到嵌套,事情就变得复杂多了,这也是大多数人卡住的地方。
转换过程中,嵌套的 JSON 会发生什么?
这部分是大多数教程都会跳过的,也正是它带来了真正的麻烦。当你的 JSON 包含嵌套的对象或数组时,任何转换工具——包括 CocoConvert——都必须决定如何将其“扁平化”。通常有几种处理方式。 一种策略是使用点标记法(dot notation)来扁平化嵌套的键。像 `address.city` 这样的字段会变成一个列标题,而它的值会直接填入该单元格。对于简单的单层嵌套,这是一个很好的解决方案。另一种方法是将嵌套值“字符串化”,即将整个对象或数组塞进一个单元格,变成一个 JSON 字符串。这种方法保留了所有数据,但在电子表格里如果不多加处理,基本上是没法读的。 第三种,也常常是最有用的策略,是将数组扩展为多行。如果一个客户有三个订单,转换器会为该客户创建三个独立的行,并为每个订单复制父级字段。这使得数据可以立即在电子表格中使用,但同时也可能让你的文件变得巨大。 CocoConvert 默认对嵌套对象使用点标记法进行扁平化,对嵌套数组则进行字符串化处理。所以,如果你的 JSON 有一个像 {"shipping": {"method": "express", "days": 2}} 这样的两层对象,你会得到 `shipping.method` 和 `shipping.days` 这两列。但如果它包含一个数组,那整个数组最终会变成一个字符串存在一个单元格里。对于深度嵌套的数据——三层或更多层,或对象数组——你几乎肯定需要用脚本预处理 JSON,才能得到一个干净的 CSV。没有任何在线转换器能神奇地处理所有嵌套模式。在处理成千上万条记录之前,你绝对应该先用一个小样本测试一下。
使用 CocoConvert 将 JSON 转换为 CSV
当你的 JSON 结构简单——比如一个扁平的对象数组或只有一层的简单嵌套——使用 CocoConvert 既快速又无需任何设置。过程非常简单。 首先,访问 /convert/json-to-csv。你会看到上传框和输出选项。上传你的 .json 文件。CocoConvert 的免费版可以处理最大 50 MB 的文件。如果你的文件更大,就得把它拆分开。一行简单的 Python 代码,比如 `json.dump(data[:5000], open('chunk1.json','w'))`,就能完美解决这个问题。 接下来,选择你的分隔符。逗号是标准选择,但如果你所在的地区 Excel 默认使用分号(没错,说的就是德国和法国的朋友们),你需要在下载前切换这个设置。这个小小的设置坑了很多人。 务必保持“包含标题行”选项的开启状态。电子表格需要第一行来作为列名。之后,只需点击“转换”即可。一个包含 10000 行的文件通常不到 10 秒就能转换完。然后你就可以下载你崭新的 .csv 文件了。 这里有个专业提示:如果你的 JSON 键(key)包含空格或特殊字符,比如 “first name” 或 “unit$price”,它们会原样成为你的列标题。Excel 可以处理这种情况,但写公式时会很烦人,因为你得用列字母而不是结构化引用。更清晰的做法是在转换前重命名 JSON 中的键,或者在导入 Excel 后直接修改列名。这能让你以后省去不少麻烦。
如何在 Excel 中正确打开 CSV
下载 CSV 文件只完成了一半工作。你如何在 Excel 中打开它,将决定你得到的是一个整洁的表格,还是一堆挤在单列里的无用数据。 不管怎样,千万不要直接双击文件。唯一可靠的方法是使用导入向导。在 Excel 365 和 Excel 2019 中,你可以在“数据” → “获取数据” → “从文本/CSV”找到它。选择你的文件后,Excel 会显示一个预览。这是你确认分隔符的机会。如果它与你转换时选择的不匹配,所有数据都会被挤进 A 列。跟 CSV 导入斗争过的人都太懂这种痛了。 注意日期格式。如果你的 JSON 使用了 ISO 8601 字符串(如 `2025-11-03T14:22:00Z`),Excel 经常会把它们当成纯文本导入。你可以修复这个问题。选中该列,进入“数据” → “分列”,选择“分隔符号”,点击两次“下一步”,然后将列数据格式设置为“日期 (YMD)”。这样就能将文本转换为可以正确排序和筛选的真实日期值。 对于大文件,比如 20 万行,Excel 虽然能导入,但会变得奇慢无比。数据透视表和 VLOOKUP 会慢得让人痛苦。这时候应该改用 Power Query(数据 → 获取与转换数据 → 从 CSV)。它在处理大型数据集方面表现好得多,不会让 Excel 变得无法使用。 另外,要注意 Excel 的硬性限制是 1,048,576 行。如果你的 JSON 生成的 CSV 行数超过这个限制,Excel 会悄无声息地丢掉超出限制的所有数据。如果你接近这个数字,最好在开始转换前就拆分源文件。
将 CSV 导入 Google 表格
Google 表格处理 CSV 导入通常比 Excel 更胜一筹,但有几个设置至关重要。过程很直接:打开一个表格,点击“文件” → “导入”,然后上传你的 CSV 文件。在弹出的对话框中,你有几个选项。务必将“导入位置”设置为“创建新工作表”,以避免覆盖现有数据。将“分隔符类型”设置为“逗号”(或为分号选择“自定义”)。 这里是最重要的设置:“将文本转换为数字、日期和公式”。如果你的数据包含看起来像数字的产品代码(例如 `00847`),你必须取消勾选此框,以保留开头的零。否则,Google 表格会“贴心”地帮你“修复”数据,把它变成数字 847。 如果你保持自动转换开启,Google 表格在解析 ISO 日期方面做得不错,能将其转换为原生格式。它也会将数字字符串转换为数字,这通常没问题,但对于那些特殊的标识符来说可能是个麻烦。 如果你经常需要这么做,比如每周一都要拉取一个新的 JSON 导出文件,就别再手动操作了。可以研究一下使用 Google 表格的 `IMPORTDATA` 函数或 Google Apps 脚本。`IMPORTDATA` 仅限于公共 URL,所以对私有数据没用。Apps 脚本则强大得多;它可以从受保护的 JSON 端点获取数据并直接写入表格,完全跳过 CSV 这一步。但对于一次性任务,或者团队里没有开发人员的情况,从 CocoConvert 的 /convert/json-to-csv 下载文件然后手动导入,是最快的方法。两分钟搞定,无需任何代码。 Google 表格也有自己的限制:每个文件 100 MB,每个电子表格 1000 万个单元格。一个有 5 万行、20 列的 CSV 也只有 100 万个单元格,所以你有足够的操作空间。
处理常见的转换错误
在将 JSON 转换为 CSV 时,你会遇到一些常见问题。以下是需要注意的地方。 对象间的键不一致。JSON 很灵活。数组中的一个对象可以有 `phone` 字段,而下一个对象可能没有。像 CocoConvert 这样的转换器会通过为整个数据集中找到的每一个唯一的键创建一个列来处理这种情况。当某条记录缺少某个键时,对应的单元格就直接留空。这是正确的处理方式,但要注意:一个包含 30 种略有不同的对象结构的混乱源文件,可能会产生一个有 80 列的 CSV,其中大部分是空的。转换前先清理一下你的 JSON 结构。 Unicode 和特殊字符。JSON 文件几乎总是 UTF-8 编码的。如果你的数据包含非拉丁字符(如阿拉伯文、中文或带重音的字母),你必须告诉 Excel 识别它们。当你通过“数据” → “获取数据” → “从文本/CSV”导入时,在预览对话框中找到“文件源”设置,并将其更改为 `65001: Unicode (UTF-8)`。如果忘了这一步,你所有的特殊字符都会变成乱码 (mojibake)。 超大数字。这个问题很微妙,但破坏性极强。JSON 可以完美精确地处理极大的数字,但电子表格不行。Excel 和 Google 表格都使用 64 位浮点数进行计算,这意味着它们在处理超过 9,007,199,254,740,992 (即 2^53) 的大整数时会开始四舍五入。如果你的 JSON 中包含一个更大的数字,比如 9007199254740993,它在导入时会被悄悄地四舍五入。如果你在处理来自数据库的大整数 ID,唯一稳妥的办法是在转换*之前*,就在 JSON 里把它们存成字符串。 空数组和 null 值。JSON 中的 `null` 值会正确地变成 CSV 中的空单元格。而空数组 `[]` 则会被不同工具区别对待。CocoConvert 会把它转换成一个空字符串,这对电子表格来说是最好的选择,可以避免混淆。
什么时候不该用转换器
在线转换器非常适合一次性任务和快速检查,特别是当你的 JSON 已经是扁平结构时。但它们并非适用于所有工作。 如果你的转换是自动化流水线的一部分——比如夜间的 ETL 作业,或 CI/CD 中的数据处理,或任何需要无人值守运行的任务——你必须使用脚本化的解决方案。在线工具对于自动化来说不够可靠。Python 的 pandas 库是这方面的行业标准;你只需几行代码就能用 `pd.read_json()` 读取 JSON,用 `pd.json_normalize()` 将其扁平化,再用 `.to_csv()` 写入 CSV。对于命令行高手来说,`jq` 在 Unix 环境中是一个极其强大的替代品:`jq -r '(.[0] | keys_unsorted) as $keys | $keys, (.[] | [.[$keys[]]] | @csv)' input.json > output.csv` 就能处理扁平数组。 当你的 JSON 嵌套很深(三层或更深,或者包含对象数组)时,没有任何在线转换器能直接给你一个干净的 CSV。问题出在结构上;你需要编写一个理解你特定数据结构的自定义脚本来正确地扁平化它。 另外一个需要了解的格式是 JSON Lines (.jsonl),它的每一行都是一个独立的 JSON 对象。CocoConvert 可以完美处理这类文件,所以你可以直接上传。只要确保你的文件没有混用常规 JSON 和 JSON Lines,否则你需要先清理一下。 至于其他所有情况?比如从 SaaS 平台导出的 JSON,需要放到电子表格里的 API 响应,或者想以表格形式审阅的配置文件——直接去 /convert/json-to-csv 就行了。上传文件,不到一分钟你就能拿到一个干净的 CSV。