欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

JSON、YAML、CSV 和 TOML:什么时候该用哪种数据格式

2026/7/6编程开发

说实话,写代码这么多年,我越来越觉得我们程序员大部分时间其实不是在写业务逻辑,而是在跟各种数据格式打交道——API 返回的是 JSON,配置文件是 YAML 或 TOML,报表导出是 CSV,Excel 里是表格行。这些格式看着都挺像的,但你要是用错了地方,真的会给自己挖坑。

我最早踩过的一个坑就是:把 YAML 当 JSON 用,结果被缩进搞到崩溃。后来慢慢摸清楚了每种格式的脾气,才明白它们压根就不是为了互相替代而设计的。这篇笔记我就把这些经验掰开揉碎讲清楚,希望对你有帮助。

JSON:API 界的通用语言

JSON(JavaScript Object Notation)现在是系统间数据交换的事实标准,尤其是 Web API。它用 {} 和 [] 来表示嵌套对象和数组,结构清晰,几乎所有编程语言都有现成的解析库。

为什么 JSON 在机器之间通信这么强?

它的规则非常严格,严格到有点“死板”:

  • 字符串必须用双引号,不能用单引号
  • 不能有注释(对,注释是不允许的)
  • 最后一个键值对后面不能有逗号,多一个逗号整个文件就废了

这种严格性其实对机器来说是好事——没有歧义。比如:

{
  "name": "Alice",
  "age": 30,
  "address": {
    "city": "Beijing",
    "zip": "100000"
  },
  "hobbies": ["reading", "coding"]
}

这段 JSON 无论用 Python 的 json.loads() 还是 JavaScript 的 JSON.parse() 解析,结果完全一致。你不用担心“这个 true 是不是字符串”之类的问题。

但 JSON 对人不友好

我试过手写一个几百行的 JSON 配置文件,结果因为少了个逗号或者多逗号,来回检查了十分钟。更痛苦的是没法写注释——你永远不知道某个字段是干嘛的,除非有外部文档。

所以我的经验是:JSON 最适合机器对机器,比如 API 请求/响应、数据库导出、缓存序列化。但如果是人类要手动编辑的文件,别用 JSON,除非你想折磨自己和同事。

YAML:人类友好但暗藏杀机的配置格式

YAML 的设计初衷就是“人类可读写”。它用缩进代替花括号,支持注释,去掉了大部分 JSON 里那些烦人的标点符号。看起来清爽多了:

# 这是用户配置
name: Alice
age: 30
address:
  city: Beijing
  zip: "100000"  # 注意这里用引号,防止类型转换
hobbies:
  - reading
  - coding

为什么 CI/CD 和容器编排都爱 YAML?

因为 DevOps 工程师经常要手动改配置,YAML 的简洁性让它在这些场景里特别受欢迎。比如 GitHub Actions、GitLab CI、Docker Compose、Kubernetes 的 YAML 文件,全是 YAML 的天下。

YAML 的三大坑

但 YAML 的“简洁”也是它的致命弱点。我踩过至少三次这种坑:

1. 缩进问题
YAML 用缩进来表示层级,一个空格不对,整个文件的意思就变了。比如:

# 正确:address 是 name 的同级
name: Alice
address:
  city: Beijing

# 错误:address 变成了 name 的子级(多了一个空格)
name: Alice
 address:
   city: Beijing

这种错误在编辑器里可能看不出来,但解析时直接报错或者静默地改变了数据结构。

2. 类型强制转换的坑
YAML 有个非常著名的坑:no 会被解析成布尔值 false。比如:

# 你可能想表达“不允许”
allow_no: no

解析后 allow_no 的值是 False,而不是字符串 "no"。同样的问题还有 yes → true,on → true,off → false。要避免这个,必须显式加引号:

allow_no: "no"

3. 大文件的可读性
YAML 在文件小的时候很清爽,但一旦超过几百行,缩进嵌套多了,你根本分不清哪一层是哪一层。我曾经维护过一个 500 行的 Kubernetes 部署 YAML,每次改都心惊胆战。

我的建议

YAML 适合人类编辑的配置文件,但一定要加校验。比如用 yamllint 检查语法,或者在 CI 里跑一次解析测试。别相信自己的眼睛,也别相信同事的缩进习惯。

TOML:既友好又明确的配置格式

TOML(Tom's Obvious Minimal Language)是 YAML 的“改良版”。它用 INI 风格的分节和键值对,支持注释,类型系统明确,而且不太容易因为缩进出问题。

TOML 长什么样?

# 服务器配置
[server]
host = "0.0.0.0"
port = 8080

[database]
name = "myapp"
user = "admin"
password = "secret"

你看,它用 [section] 来表示层级,用 = 来赋值,非常直观。而且缩进只影响可读性,不影响结构——这是和 YAML 最大的区别。

TOML 的优势

  • 类型明确:数字就是数字,字符串就是字符串,没有 YAML 那种 no 变 false 的诡异行为。
  • 注释支持:用 # 写注释,想写多少写多少。
  • 结构简单:适合扁平到中等嵌套的配置。比如 Python 的 pyproject.toml、Rust 的 Cargo.toml 都用了它。

TOML 的不足

如果数据嵌套太深,TOML 会变得很啰嗦。比如:

[user.address]
city = "Beijing"
zip = "100000"

[user.contact.email]
primary = "alice@example.com"
secondary = "alice.backup@example.com"

相比之下,JSON 或 YAML 可以用一行嵌套搞定。所以 TOML 最适合配置文件中层级不超过两三层的场景。

我什么时候用 TOML?

当我想让配置文件“既人类可读,又没有歧义”的时候。比如自己写的 CLI 工具的配置,或者团队里需要多人维护的配置文件,TOML 比 YAML 安全得多。

CSV:最原始但最通用的表格格式

CSV(逗号分隔值)是这四个里最简单的,也是最“笨”的。它只做一件事:把表格数据存成文本。

CSV 的典型用法

name,age,city
Alice,30,Beijing
Bob,25,Shanghai

这种格式几乎所有软件都支持:Excel 可以直接打开,数据库可以导入,数据分析工具(Pandas、R)都有现成的解析器。

CSV 的硬伤

没有嵌套概念。你不能在 CSV 里表示一个“用户对象里有地址对象”这种结构。如果你非要把嵌套数据塞进 CSV,就得“拍平”它——把嵌套的键用点号连起来变成列名:

user.name,user.address.city,user.address.zip
Alice,Beijing,100000

这样做虽然可行,但数据表会变得很宽,而且失去了原本的结构信息。

现实世界的 CSV 很脏:

  • 值里包含逗号怎么办?比如 "Beijing, China" 必须用引号包起来。
  • 值里包含换行符怎么办?有些 CSV 解析器会直接崩溃。
  • 不同工具的换行符不一致(Windows 用 \r\n,Unix 用 \n),跨平台时容易出问题。

我的建议

CSV 只适合两件事:

  1. 给 Excel 或 Google Sheets 用的表格数据
  2. 简单的数据导入/导出

别试图把层级数据塞进 CSV,也别用 CSV 做配置。如果你需要表格格式但又要处理复杂数据,考虑用 Parquet 或 Avro。

格式之间的转换

实际工作中经常需要在不同格式之间来回倒腾。大多数情况下转换是直接的,但有一个关键点要注意:结构不匹配。

JSON ↔ YAML ↔ TOML

这三种格式都支持嵌套,所以互相转换通常很干净。比如 JSON 转 YAML:

{
  "user": {
    "name": "Alice",
    "address": {
      "city": "Beijing"
    }
  }
}

转成 YAML 就是:

user:
  name: Alice
  address:
    city: Beijing

基本上是一一对应的,不用担心丢数据。

JSON ↔ CSV 的坑

这是最容易踩坑的地方。因为 CSV 是扁平的,所以转换嵌套 JSON 时必须“拍平”:

{
  "user": {
    "name": "Alice",
    "address": {
      "city": "Beijing"
    }
  }
}

拍平后变成 CSV:

user.name,user.address.city
Alice,Beijing

反过来,从 CSV 转成 JSON 会得到一个扁平的对象数组:

[
  {
    "user.name": "Alice",
    "user.address.city": "Beijing"
  }
]

注意这里的键名变成了点号分隔的字符串,不是嵌套对象。如果你想要嵌套结构,还得自己写逻辑把键名拆开。

转换工具的选择

市面上有很多转换工具,但我推荐用客户端工具,尤其是处理敏感数据时。我写了一个小工具叫 boxtool.io/data-converter,支持 JSON、YAML、CSV、TOML 之间的双向转换,所有操作都在浏览器本地完成,数据不会上传到服务器。

为什么要强调“本地”?因为有时候你要转换的是客户数据、内部报表或者任何你不想上传到第三方服务器的内容。用客户端工具,你的数据永远只在你自己的机器上。

快速决策指南

根据我多年的踩坑经验,总结了一个简单的规则:

场景 推荐格式 原因
API 响应/数据交换 JSON 机器友好,解析一致
CI/CD 配置(如 GitHub Actions) YAML 人类可读,生态成熟
需要明确类型的配置 TOML 无歧义,安全
表格数据/Excel 导出 CSV 通用性最强
手写配置文件(团队维护) TOML > YAML > JSON TOML 最安全,YAML 次之
深度嵌套的数据存储 JSON 或 YAML 两者都支持嵌套

最后再啰嗦一句:别把格式当信仰。JSON 再好,也别用它写配置文件;YAML 再方便,也要记得校验;CSV 再简单,也别往里塞树状数据。选对工具,省下的时间够你喝好几杯咖啡的。

编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消