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 尝试推断类型(数字、布尔值),因此当您必须使用引号时有特定的规则。

“必须引用”列表

如果出现以下情况,则必须将字符串用双引号 "" 括起来:

  1. 它看起来像一个数字或布尔值: 如果您想要字符串 "123""true",请引用它。 否则,它们将变成数字“123”和布尔值“true”。
  1. 它包含分隔符: 如果您的字符串有逗号 , (或任何您的活动分隔符),请引用它。
  1. 它有空白边缘: 前导或尾随空格需要引号。
  1. 包含特殊字符: :"\[]{} 等字符。
  1. 为空: 空字符串表示为""

示例:

转义序列

保持简单。 TOON 只识别字符串内的五个转义序列。 其他的都是无效的。

  • \\(反斜杠)
  • \"(双引号)
  • \n(换行符)
  • \r(回车)
  • \t(制表符)

高级标题和分隔符

如果您的数据充满逗号怎么办? 您不想引用每个字段。 TOON 允许您更改数组头中的分隔符。

您可以通过将 TabPipe (|) 放置在方括号或大括号内来使用它。

管道分隔符示例:

通过在标头中添加“|”,解析器知道查找管道而不是逗号,从而保持语法干净。

钥匙折叠

如果您有深层嵌套但只有一条数据路径,则不需要缩进五次。 您可以使用点符号(关键折叠)来展平您的结构。

标准嵌套:

``MD 用户: 简介: 设置: 通知: 电子邮件:真实 短信:假

折叠(清洁):

``MD 用户.配置文件.设置.通知: 电子邮件:真实 短信:假

快速类型参考

TOON 直接映射到 JSON 类型,但它可以优雅地处理 JavaScript 特定的边缘情况,以确保有效的输出。

  • 数字: 存储为规范小数。 “1.0”变为“1”。
  • Infinity / NaN: 这些变为“null”(因为 JSON 不支持它们)。
  • 日期: 转换为带引号的 ISO 字符串。
  • 未定义/函数: 转换为“null”。
  • 空对象: 表示为空(空输出)。
  • 空数组: 表示为 key[0]:

TOON 是一种奖励精确性的格式。 可能需要一些时间来习惯计算数组项,但可读性和文件大小的回报是值得付出努力的。 快乐编码!