📄 本篇一句话
数据要在系统之间搬家,就得有大家都认的行李格式——CSV 一行一条最朴素,XML 标签最隆重,JSON 是 Web 的事实标准,YAML 专管配置文件。
📝 在本章的位置
上游:3-9/3-10 的字符编码(所有格式底层都是文本+编码);6-7 的 Ajax 拿回来的数据多半是 JSON。下游:6-10 的 SQL 是数据的另一种「格式」(表);6-15 的 API 返回的多半是 JSON。
一、CSV:逗号分隔的表格
CSV(Comma-Separated Values)=每行一条记录、逗号分列:
name,score
波仔,88
小红,92
- 优点:Excel 直接开、人类直接读、几十年来表格交换的通用语。
- 软肋:没有类型(88 是数字还是文本?)、逗号出现在内容里要转义、没有嵌套结构——只适合二维平表。
- ⚠️ 教材英版时代 Excel 的坑:中文 Excel 默认按分号/制表符解析,直接双击打开逗号 CSV 会挤成一列——「数据→导入」才能正确分列。
二、XML:标签套标签的隆重格式
XML(eXtensible Markup Language)=自定义标签的树形格式:
<student>
<name>波仔</name>
<score>88</score>
</student>
- 优点:结构严谨(有模式校验 XSD)、命名空间防冲突、工具链成熟——SOAP、Java 生态老配置(web.xml)、Office 文档底层(docx/xlsx)都还在用。
- 软肋:啰嗦——一个数字要用两个标签包着,传输体积大、解析慢;Web 前端已基本被 JSON 取代。
三、JSON:Web 的事实标准
JSON(JavaScript Object Notation)——长得像 JS 对象字面量:
{"name": "波仔", "scores": [88, 92], "pass": true}
- 优点:轻(引号冒号就够)、JS 原生支持(
JSON.parse/stringify)、类型齐全(字符串/数字/布尔/数组/对象/null)——API 交换、配置、日志,Web 时代一统江湖。 - 规矩:键必须双引号、不许注释、末尾不能多逗号。
四、YAML:写给人看的配置
YAML(YAML Ain't Markup Language)=缩进表达层次、最少标点:
student:
name: 波仔
scores: [88, 92]
pass: true
- 主战场是配置文件:Docker Compose、GitHub Actions、Kubernetes 全是 YAML——人要手写、机器要读,缩进即结构。
- 软肋:缩进错一格含义就变(4-1 的缩进敏感在数据格式里的翻版);类型魔法多(
no会被解析成 false)。
动手 Demo:同一份数据,四种格式互转
import json, csv, io
data = [{"name": "波仔", "scores": [88, 92], "pass": True},
{"name": "小红", "scores": [95, 89], "pass": True}]
# JSON:一行搬走
s = json.dumps(data, ensure_ascii=False)
print(s[:50], "...")
print("JSON 还原:", json.loads(s) == data) # True —— 无损往返
# CSV:二维平表(嵌套结构装不下,只能拍平)
buf = io.StringIO()
w = csv.writer(buf)
w.writerow(["name", "score"])
for d in data:
for sc in d["scores"]:
w.writerow([d["name"], sc])
print("CSV 形态:")
print(buf.getvalue(), end="")
# YAML:手写最舒服(无 pyyaml 时直接读文本)
yaml_text = """student:
name: 波仔
scores: [88, 92]"""
print(yaml_text)
看到什么算成功:JSON 原样还原(True)、CSV 拍平成四行、YAML 缩进成树——同一份数据,四种行李箱,按用途挑。
读结果:能无损往返的 JSON 适合机器交换;拍平的 CSV 适合 Excel;人手写的配置选 YAML;老系统对接才见 XML。
30 秒实验
F12 控制台跑 JSON.stringify({b:2,a:1})——得 '{"b":2,"a":1}'(保持键序);再跑 JSON.parse('{"n":1,}')——报错(JSON 不许尾逗号)。感受一下:JS 对象字面量宽松,JSON 是 stricter 子集。
常见误区
- 「JSON 里能写注释」——不能;要注释用 YAML 或先解析再处理。规范如此,配置党为此常选 YAML。
- 「CSV 什么都能装」——它没有类型没有嵌套;层级数据硬塞 CSV 必然变形。
- 「XML 已死」——前端接口确实让位 JSON,但 SOAP、Office 文档(docx/xlsx 本体)、大量企业系统仍是 XML 的天下。
自测三问(点击展开)
1. **四种格式各选什么场景?** 答:表格交换 CSV、机器间数据交换 JSON、人写配置 YAML、老系统/强校验 XML。 2. **JSON 比 XML 流行的原因?** 答:更轻、JS 原生解析、类型够用;XML 啰嗦但校验与命名空间更强。 3. **YAML 最大的坑?** 答:缩进即结构,错一格含义就变;另有类型魔法(no→false)。- ☑ 6-9 完成 —— 四种行李箱:CSV/XML/JSON/YAML
- ☐ 下一节 6-10 SQL、DBMS
相关笔记
- 字符编码 —— 一切文本格式的地基
- 数据库 3-18 · GROUP BY —— SQL 视角组织数据
- ⌨️ 编程原理 · 索引 —— 全课路线图