TOON 格式备忘单
如果您曾经觉得 JSON 太冗长(所有这些大括号!),但 YAML 有点太“神奇”且不可预测,您可能会爱上 TOON。 这种格式在人类可读性和机器解析速度之间取得了独特的平衡。 它被设计为密集、明确且解析速度极快。
无论您是要迁移数据还是只是尝试调试配置文件,此备忘单都涵盖了您需要了解的基本语法。
理念:更少噪音,更多数据
您首先会注意到的是,TOON 看起来很像 YAML,但其行为却严格类似于 JSON。 它放弃了左大括号和右大括号,转而使用缩进和换行符,使您的数据立即看起来更干净。
对象和嵌套
在 JSON 中,您习惯于将所有内容包裹在大括号中。 在 TOON 中,结构是通过缩进来暗示的。
JSON:
``MD { “项目”:{ “元数据”:{ "name": "半人马座阿尔法星", “状态”:“活跃” }, “里程碑”:[ { “阶段”:“设计”, “优先级”:1 }, { “阶段”:“测试”, “优先级”:2 } ] } }
卡通:
``MD 项目: 元数据: 名称:半人马座阿尔法星 状态:活跃 里程碑[2]{阶段,优先级}: 设计,1 测试,2
请注意,键不需要引号,除非它们包含特殊字符,并且层次结构在视觉上很明显。
数组的威力
这就是 TOON 与其他格式真正不同的地方。 TOON 要求您在键本身中声明数组的 长度。 乍一看这可能看起来很奇怪,但它允许解析器预先分配内存,使其速度非常快。
原始数组
对于简单的字符串或数字列表,TOON 使用紧凑的逗号分隔语法。
语法:
``MD 键[长度]:项目1,项目2,项目3
如果你有一个根数组(整个文件只是一个列表),它看起来像这样:
表格数组(杀手级功能)
这是通常赢得开发人员青睐的功能。 如果您有一个全部共享相同键的对象数组(如数据库中的行),TOON 允许您在标头中定义模式_once_,然后仅列出值。 这消除了 JSON 中的大量冗余。
语法:
``MD 键[行]{col1,col2}:
JSON:
``MD { “库存”:[ { “sku”:“KB-99”, “数量”:50, “过道”:4, “重新排序”:错误 }, { “sku”:“MS-12”, “数量”:12, “过道”:7, “重新排序”:正确 }, { “sku”:“MN-44”, “数量”:8, “过道”:2, “重新排序”:正确 } ] }
卡通:
``MD 库存[3]{sku、数量、通道、重新订购}: KB-99,50,4,假 MS-12,12,7,真 MN-44,8,2,真
这种“CSV-inside-YAML”方法使大型数据集具有令人难以置信的可读性和紧凑性。
混合和嵌套数组
有时数据并不统一。 如果您的数组包含不同类型的数据(数字与对象混合),或者包含复杂的嵌套对象,则 TOON 会退回到使用连字符的项目符号样式语法。
您甚至可以在数组中包含数组。 请注意内部数组如何声明其长度:
引用:何时使用它
TOON 最好的事情之一是您很少需要引号。 你可以写Hello world 👋而不用""包裹它。 但是,由于 TOON 尝试推断类型(数字、布尔值),因此当您必须使用引号时有特定的规则。
“必须引用”列表
如果出现以下情况,则必须将字符串用双引号 "" 括起来:
- 它看起来像一个数字或布尔值: 如果您想要字符串
"123"或"true",请引用它。 否则,它们将变成数字“123”和布尔值“true”。
- 它包含分隔符: 如果您的字符串有逗号
,(或任何您的活动分隔符),请引用它。
- 它有空白边缘: 前导或尾随空格需要引号。
- 包含特殊字符:
:、"、\、[、]、{、}等字符。
- 为空: 空字符串表示为
""。
示例:
转义序列
保持简单。 TOON 只识别字符串内的五个转义序列。 其他的都是无效的。
\\(反斜杠)
\"(双引号)
\n(换行符)
\r(回车)
\t(制表符)
高级标题和分隔符
如果您的数据充满逗号怎么办? 您不想引用每个字段。 TOON 允许您更改数组头中的分隔符。
您可以通过将 Tab 或 Pipe (|) 放置在方括号或大括号内来使用它。
管道分隔符示例:
通过在标头中添加“|”,解析器知道查找管道而不是逗号,从而保持语法干净。
钥匙折叠
如果您有深层嵌套但只有一条数据路径,则不需要缩进五次。 您可以使用点符号(关键折叠)来展平您的结构。
标准嵌套:
``MD 用户: 简介: 设置: 通知: 电子邮件:真实 短信:假
折叠(清洁):
``MD 用户.配置文件.设置.通知: 电子邮件:真实 短信:假
快速类型参考
TOON 直接映射到 JSON 类型,但它可以优雅地处理 JavaScript 特定的边缘情况,以确保有效的输出。
- 数字: 存储为规范小数。 “1.0”变为“1”。
- Infinity / NaN: 这些变为“null”(因为 JSON 不支持它们)。
- 日期: 转换为带引号的 ISO 字符串。
- 未定义/函数: 转换为“null”。
- 空对象: 表示为空(空输出)。
- 空数组: 表示为
key[0]:。
TOON 是一种奖励精确性的格式。 可能需要一些时间来习惯计算数组项,但可读性和文件大小的回报是值得付出努力的。 快乐编码!