选择格式
权衡取舍
选择格式 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
三种格式,三种用途
现在您已经了解 JSON、CSV 和 YAML。每种格式都适合不同的场景。选择合适的格式,可以让数据更易于生成、存储和使用。
- JSON 用于 API 和 Web
- CSV 用于表格或电子表格数据
- YAML 用于配置
puts ['JSON', 'CSV', 'YAML'].join(', ')JSON 的优势
JSON 简洁、得到普遍支持,并且可以映射为嵌套的哈希和数组。它是Web API 以及服务之间数据交换的事实标准。
require 'json'
puts({ id: 1, items: [1, 2] }.to_json)JSON 的不足
JSON不支持注释,而且对人类手动编辑来说较为冗长。末尾逗号和单引号都是无效的,这常常会让人在配置文件中遇到问题。
require 'json'
begin
JSON.parse('{"a":1,}')
rescue JSON::ParserError
puts 'trailing comma not allowed'
endCSV 的优势
CSV 非常适合扁平的表格数据:行和列。电子表格、导出数据和批量导入都支持 CSV,而且对于大型表格来说非常紧凑。
require 'csv'
puts(CSV.generate { |c| c << ['a', 'b']; c << [1, 2] })CSV 的不足
CSV 无法表示嵌套或层次化数据。它没有标准的类型系统,因此在转换之前所有内容都是字符串;此外,不同方言的分隔符和引号规则也各不相同。
require 'csv'
row = CSV.parse_line('5,true')
puts(row[0].class)
puts(row[1].class)YAML 的优势
YAML最易于人类阅读,支持注释,并且能够清晰地处理嵌套结构。因此,它非常适合开发人员手动编辑的配置文件。
require 'yaml'
text = "# app config\nport: 8081"
puts(YAML.load(text)['port'])YAML 的不足
YAML 的缩进规则容易出错(多出的一个空格就可能导致解析失败),而不安全的加载可能带来安全风险。它的解析速度也比 JSON 慢。
require 'yaml'
cfg = YAML.safe_load("port: 8081")
puts(cfg['port'])嵌套结构对比
JSON 和 YAML 都能自然地表示相同的嵌套结构;CSV 则不能。
require 'json'
require 'yaml'
data = { 'user' => { 'name' => 'Ada', 'roles' => ['admin'] } }
puts(data.to_json)
puts(data.to_yaml)可读性与紧凑性
需要权衡:YAML 的可读性最高,JSON 较为均衡,CSV 对表格来说最紧凑。请根据主要使用者是人还是机器来选择。
require 'json'
require 'yaml'
h = { 'a' => 1, 'b' => 2 }
puts("JSON len: #{h.to_json.length}")
puts("YAML len: #{h.to_yaml.length}")选择指南
快速规则:
- 需要与 Web API 通信?使用 JSON
- 需要导出行数据到电子表格?使用 CSV
- 需要供人编辑的应用设置?使用 YAML
如果无法确定,JSON 是最稳妥的默认数据交换格式。
choice = { api: 'JSON', table: 'CSV', config: 'YAML' }
puts(choice[:config])在格式之间转换
由于三种格式都会 parse 为相同的 Ruby 哈希或数组结构,因此转换很简单:parse 一种格式,再 dump 另一种格式。
require 'json'
require 'yaml'
data = JSON.parse('{"port":8081,"name":"app"}')
puts(data.to_yaml)快速检查
对于开发人员手动编辑且希望添加注释的配置文件,哪种格式最适合作为默认选择?
回顾:选择格式
现在您可以选择合适的工具:
- JSON:API、数据交换、较为均衡
- CSV:扁平表格、电子表格、紧凑
- YAML:配置、易读、支持注释和嵌套
- 所有格式都会 parse 为相同的 Ruby 结构,因此转换很容易
require 'yaml'
require 'json'
puts(YAML.load('a: 1').to_json)常见问题解答
「选择格式」课时是免费的吗?
是的 — 「选择格式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「选择格式」这节课中我会学到什么?
权衡取舍 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「选择格式」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。