数据序列化格式
本文介绍数据序列化 (data serialization) 的一些基本格式。所谓数据序列化,就是把内存中的数据结构(如对象、字典、数组)转化为可以存储或传输的文本或二进制形式。反过来,再把这种序列化格式的数据解析读取到内存的过程称为反序列化 (deserialization)。
本文主要介绍四种数据序列化格式,包括 YAML、JSON、XML 和 TOML,这些四种格式的设计理念各不相同,下表展示了这四种格式的一些对比信息:
格式 | 层次结构 | 特点 | 适用场景 |
---|---|---|---|
YAML | 缩进表示 | 容错性强,可读性好 | 配置文件、CI/CD |
JSON | 花括号嵌套 | 语法严格,通用性好 | API、Web 传输 |
XML | 标签嵌套 | 内容冗长,但语义强 | 配置、文档、协议 |
TOML | 标题段 | 简洁易读,歧义性低 | 应用配置、包管理 |
共性语法¶
注释 / comments¶
字典 / dictionary¶
列表 / list¶
字符串 / string¶
嵌套结构 / object¶
日期与布尔值 / datetime & bool¶
YAML 特性¶
1)缩进必须用空格(不能用 Tab),至于几个空格无所谓,只要前后文一致即可。
2)支持引用与锚点:
使用 &
符号定义当前配置项的别名,用于后续复用。使用 *
符号表示复用对应的配置,使用 <<
表示合并到对应的配置。例如下面的配置:
等价于:
3)支持多文档分隔符 ---
。解析器会按照 ---
自动分割 YAML 配置,表示不同的文档配置。
JSON 特性¶
1)语法严格,键必须用双引号。
2)不允许尾随逗号。
3)不支持注释(但有些实现如 JSON5 支持)。
XML 特性¶
1)必须有根节点。
2)属性可附加在标签上。例如:
3)支持命名空间与自定义标签。
TOML 特性¶
1)使用方括号分节 [section]
表示层级。一层表示一级,第一级含有一层方括号。
2)支持表格数组:
3)类型明确(int、float、bool、datetime、string)