结构化数据格式对照速查
CSV、JSON、YAML、TOML、XML、INI 各自适合什么场景、能不能写注释、有哪些踩过一次就再也不会忘的坑。
同样的数据可以用很多种格式表达,差异往往体现在三件事上:能不能写注释、类型是不是显式、层级怎么表达。这三件事决定了它更适合做「配置文件」还是「数据交换」,也决定了团队协作时会不会互相踩坑。
一个实用的分类法:给人写的(YAML、TOML、INI)优先可读性与注释;给程序传的(JSON、JSONL、XML)优先严格与可解析;表格数据(CSV、TSV)优先体积与通用性。下面先给总览对照,再逐格式说清坑在哪里。
1总览对照
先看四列:能不能写注释、是否显式声明类型、是否天然支持层级、以及典型用途。
| 格式 | 注释 | 类型 | 层级 | 典型用途 |
|---|---|---|---|---|
CSV | 不支持 | 全部是字符串,靠约定 | 仅两维(行 / 列) | 表格数据交换、导出给 Excel |
TSV | 不支持 | 同上 | 仅两维 | 数据里含逗号时替代 CSV |
JSON | 不支持 | 有,但数字不分整型与浮点 | 支持嵌套对象与数组 | 接口传输的事实标准 |
JSONL | 不支持 | 同 JSON | 每行一个独立对象 | 日志、流式处理、批量导入 |
YAML | 支持 # | 隐式推断(易误判) | 靠缩进表达 | 编排配置、CI 流程 |
TOML | 支持 # | 显式且严格 | 用 [table] 分段 | 应用配置,如各类包管理文件 |
XML | 支持 <!-- --> | 全部为文本,可加 Schema 校验 | 支持嵌套与属性 | 政务、金融等要求严格校验的老系统 |
INI | 支持 ; 或 # | 全部为字符串 | 仅两维(节 / 键) | 简单配置,如部分桌面软件与系统文件 |
2CSV:规范很少,坑很多
CSV 看起来最简单,实际上「简单」正是它的问题来源——很多细节没有唯一答案,各家工具的默认行为并不一致。RFC 4180 给出了一个参考定义。
- 分隔符与换行
- 标准用逗号分隔、
CRLF换行;但很多工具接受分号(欧洲区域)或制表符(即 TSV),解析时需先确认 - 引号规则
- 字段里含分隔符、引号或换行时必须用双引号包裹;字段内的双引号用两个双引号表示(
"") - 编码与 BOM
- 给 Excel 打开的中文 CSV 建议带 UTF-8 BOM,否则 Excel 会按本地编码解释而乱码
- 前导零与长数字
0755、13800138000这类内容可能被 Excel 自动转成数字,前导零丢失、长数字变科学计数法。导出时应明确说明字段类型,或改用带引号的形式- 首行表头
- 惯例是第一行为列名,但规范并未强制;对接时要确认
- 不要手工拼接
- 用字符串拼 CSV 几乎必然出错(引号、换行、分隔符)。使用标准的 CSV 库写入与解析
3JSON 与它的三条硬规则
JSON 的严格性正是它在接口场景胜出的原因。它的三条硬规则经常把从 JavaScript 对象字面量复制过来的内容判为非法。
- 不允许注释
- JSON 里写
//或/* */都是非法语法。需要注释的场景应改用 JSON5、JSONC 或 YAML - 不允许尾随逗号
{"a":1,}非法。这在手写配置时是最高频的错误- 不允许特殊数值
NaN、Infinity在标准 JSON 中不合法,需要改成字符串或null- 键名必须双引号
{a: 1}非法,必须是{"a": 1}- 数字类型不分家
- JSON 只有一种数字类型,
1与1.0在解析后可能都变成同一个值;需要区分时用字符串 - 大整数精度
- 超过 2 的 53 次方的整数在 JavaScript 里会丢失精度,长 ID 建议用字符串传输
4YAML 与 TOML:给人类读的两种思路
两者都常用于配置,但取向完全不同:YAML 追求紧凑与表达力,TOML 追求无歧义。这一点决定了它们的风险差异。
| 对比项 | YAML | TOML |
|---|---|---|
| 语法基础 | 缩进(禁止用 Tab) | 显式的 [section] 与 key = value |
| 类型推断 | 会推断,因此存在歧义 | 写什么类型就是什么类型 |
| 经典陷阱 | NO 被解析成布尔 false;1.20 变成数字 1.2(版本号被吃掉末尾零) | 几乎没有歧义陷阱,代价是写法略啰嗦 |
| 多行文本 | 支持 | 与 > 两种块写法 | 支持多行基本字符串 |
| 适用场景 | 层级深、结构灵活的编排文件 | 扁平、以配置项为主的工程文件 |
YAML 的「挪威问题」很有名:因为挪威的国家代码在 YAML 1.1 的类型规则里与布尔值 `false` 冲突,一个本意是国家代码的 `NO` 会被解析成假值。写 YAML 时凡是不确定的字符串,加引号最保险。
5XML 与 JSONL 各自的位置
这两个格式常被误认为「过时」或「冷门」,实际上在特定场景里它们仍是首选。
- XML 的优势在约束
- 配合 XSD 可以做严格的结构校验,命名空间能避免字段冲突,还有成熟的签名与加密规范。政务、金融、出版行业仍大量使用
- XML 的代价在体积
- 标签成对出现,同样数据量下体积通常是 JSON 的数倍,且解析开销更大
- JSONL 的优势在流式
- 每行一个独立完整的 JSON 对象,可以逐行读取、逐行处理,不需要把整个文件载入内存
- JSONL 的典型场景
- 日志文件、大数据批量导入(许多数据库与分析工具支持直接读 JSONL)、模型训练数据
- JSONL 的注意事项
- 文件整体不是合法 JSON,不能用
JSON.parse直接解析;每行之间不能有半个对象;换行符必须规范 - JSON 与 JSONL 的取舍
- 数据要整体交给一个接口就用 JSON 数组;要按行追加、按行处理就用 JSONL
6怎么选:三个判断问题
- 这份数据是给程序还是给人读的?
- 给程序读优先 JSON(通用、库最多);给人读优先 YAML 或 TOML
- 需要注释吗?
- 需要持久保存的解释性说明 → YAML / TOML / INI;JSON 无法做到,只能另存文档
- 是表格还是树?
- 行列表格用 CSV / TSV;含嵌套结构用 JSON / YAML / TOML;需要严格校验的旧系统对接用 XML
看完就能用的站内工具
全部工具总览 →CSV、TSV、JSON、Markdown 表格四种格式互相转换
在线YAML格式化校验工具 - 支持YAML格式化、语法校验、JSON与YAML互转、压缩、结构预览,纯浏览器本地运行
JSON格式化 - JSON 美化、压缩、校验,支持层级缩进和高亮显示
在线JSON转CSV工具,将JSON数组数据转换为标准CSV格式,支持自定义分隔符、引号样式、自动识别字段、嵌套对象展开,转换结果可一键复制或下载。
XML格式化 - XML美化、压缩、校验,支持语法高亮和错误提示
验证JSON数据是否符合Schema规范,精准定位验证失败字段,支持Draft-07标准
关于「结构化数据格式对照速查」的常见问题
JSON 和 YAML 该用哪个?
看目标是「机器交换」还是「人工维护」。JSON 语法严格、几乎所有语言都有内置解析器、不易产生歧义,是接口传输与数据存储的默认选择;但它不支持注释、不允许尾随逗号,手写容易出错。YAML 支持注释、写法紧凑,适合层级较深的配置文件,但类型推断会带来歧义(比如 NO 被当成布尔假、版本号 1.20 被截成 1.2)。所以常见组合是:接口与存储用 JSON,可读性优先的配置用 YAML,配置项平坦、要求无歧义的工程文件用 TOML。
为什么我的 JSON 一直被判定格式错误?
按出现频率排查四点:一是写了注释(// 与 /* */ 在标准 JSON 中都不合法);二是最后一个元素后面留了尾随逗号;三是键名没有加双引号;四是出现了 NaN 或 Infinity。另外注意从 JavaScript 对象字面量复制过来的内容,即使浏览器里能跑,也可能不是合法 JSON。用格式校验工具格式化一遍,报错位置会直接指出问题所在。
CSV 打开后长数字变成科学计数法或前导零消失怎么办?
这是 Excel 等表格软件把内容自动识别成数字导致的:13800138000 变科学计数法,0755 变成 755。解决办法有三类:一是导出时把该列写成带引号的文本形式并明确标注为文本;二是改用「数据 → 从文本/CSV 导入」,在向导中把该列指定为文本类型;三是干脆改用 Excel 原生格式(xlsx)传递。如果只是给人看,可以在字段前加一个制表符或单引号强制文本,但这会污染数据本身。
JSONL 和 JSON 有什么区别?
JSON 是整个文件表示一个 JSON 值(通常是一个数组或对象),必须完整读入才能解析;JSONL(也叫 NDJSON)是每行一个独立完整的 JSON 对象,可以一行一行地读取和处理,不需要把整个文件载入内存。所以 JSONL 特别适合日志、流式数据和大批量导入。要注意的是 JSONL 文件整体并不是合法 JSON,不能用普通的 JSON 解析器直接解析,必须按行拆开;同时每行之间不能出现跨行的对象。
继续查:相关内容
全部速查 →内容说明:本页速查数据由本站自行整理,事实性内容以对应官方规范与文档为准,未复制第三方速查表或百科的表述。数据最后核对日期:2026-10-05。若发现错误或已更新的标准,欢迎通过页脚反馈入口告知。
速查在线工具箱