- 文档
- 教程
【免费下载链接】learnxinyminutes-docs
Code documentation written as code! How novel and totally my idea!
JSON(JavaScript Object Notation)是一种极其简单的数据交换格式,它不依赖任何特定编程语言,既能被人类轻松读写,也能被机器高效解析与生成。本篇技术指南以 learnxinyminutes-docs 仓库中的捷克语教程 cs/json.md 为核心骨架,结合仓库英文原文 json.md 与配套校验工具 lint/frontmatter.py 的实现细节,系统讲解 JSON 的全部数据类型、完整语法示例、嵌套结构与常见兼容性陷阱,帮助读者在几分钟内掌握 JSON 的全部核心能力,并理解这类"以代码形式编写的文档"在仓库中是如何被组织和校验的。
JSON 是什么:极简的数据交换格式
JSON 的全称是 JavaScript Object Notation,但它早已成为跨语言、跨平台通用的数据交换标准。它的核心设计目标只有一条:简单。正如 Learn X in Y Minutes 系列一贯的风格,捷克语教程在开篇就点明:JSON 在其最基础的形态下不包含任何注释,是 100% 有效、自解释(speaks for itself)的格式。
一份 JSON 数据可以是下面将要介绍的任意一种类型的值,但在实际应用中,它几乎总是代表以下两种结构之一:
- 名称/值对的集合(使用
{ }):在不同语言中,它被实现为对象(Object)、记录(Record)、结构体(Struct)、字典(Dictionary)、哈希表(Hash Table)、键控列表(Keyed List)或关联数组(Associative Array)。 - 有序的值列表(使用
[ ]):在不同语言中,它被实现为数组(Array)、向量(Vector)、列表(List)或序列(Sequence)。
理解这一点很关键:JSON 本身没有"对象"和"数组"之外的高阶抽象,一切复杂数据结构都是由这两种容器无限嵌套组合而成。
JSON 支持的六种数据类型
JSON 总共只定义了六种数据类型,涵盖绝大多数结构化数据表达需求:
| 类型 | 示例 |
|---|---|
| 字符串(String) | "hello"、"\"A quote.\""、"\u0abe"、"Newline.\n" |
| 数字(Number) | 23、0.11、12e10、3.141e-10、1.23e+4 |
| 对象(Object) | { "key": "value" } |
| 数组(Array) | ["Values"] |
| 布尔值(Boolean) | true、false |
| 空值(Null) | null |
其中值得注意的细节:
- 字符串必须使用双引号(
")包裹,单引号在标准 JSON 中不被允许;字符串内支持转义序列(如\"表示引号、\n表示换行)以及\uXXXX形式的 Unicode 转义。 - 数字支持整数、小数和科学计数法(指数形式),例如
1.2e+100这种超大数值也是合法 JSON。 - 布尔值必须是小写的
true/false,不能写成True或TRUE。 null用于显式表示"空",与布尔值一样必须全小写。
完整语法示例逐段解析
捷克语教程给出了一段覆盖所有语法要点的完整 JSON 示例(与英文原文 json.md 内容一致),下面逐段解析其含义:
{ "klic": "value", "hodnoty": "Musí být vždy uvozený v dvojitých uvozovkách", "cisla": 0, "retezce": "Hellø, wørld. Všechny unicode znaky jsou povolené, společně s \"escapováním\".", "pravdivostni_hodnota": true, "prazdna_hodnota": null, "velke_cislo": 1.2e+100, "objekt": { "komentar": "Most of your structure will come from objects.", "pole": [0, 1, 2, 3, "Pole nemusí být pouze homogenní.", 5], "jiny_objekt": { "comment": "Je povolené jakkoli hluboké zanoření." } }, "cokoli": [ { "zdroje_drasliku": ["banány"] }, [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, "neo"], [0, 0, 0, 1] ] ], "alternativni_styl_zapisu": { "komentar": "Mrkni se na toto!" , "pozice_carky": "Na pozici čárky nezáleží - pokud je před hodnotou, ať už je kdekoli, tak je validní." , "dalsi_komentar": "To je skvělé." }, "to_bylo_rychle": "A tím jsme hotový. Nyní již víte vše, co může formát JSON nabídnout!" }这段示例虽然只有几十行,却浓缩了 JSON 语法的全部要点:
1. 键与字符串:对象的键(key)同样必须用双引号包裹;字符串值内部可以自由使用 Unicode 字符(如示例中的Hellø, wørld),并支持\"之类的转义。
2. 数字、布尔与空值:"cisla": 0演示数字;"pravdivostni_hodnota": true演示布尔;"prazdna_hodnota": null演示空值;"velke_cislo": 1.2e+100演示科学计数法大数。
3. 对象嵌套:"objekt"的值是一个新的对象,其中既包含数组("pole")也包含更深层的对象("jiny_objekt")。教程特别强调:对象可以任意深度地嵌套(jakkoli hluboké zanoření),这非常实用——绝大多数复杂结构都来自对象的层层组合。
4. 数组的异构性与多维嵌套:"cokoli"的值是一个数组,其元素既有对象({ "zdroje_drasliku": ["banány"] })又有二维数组(一个 4×4 的矩阵结构)。这说明数组元素不需要同质(homogenní),数字、字符串、对象、数组可以混合出现,甚至可以构造出"矩阵 + 字符串"这种混合内容(如[0, 0, 1, "neo"])。
5. 逗号位置的灵活性:"alternativni_styl_zapisu"演示了一个有趣的事实——在 JSON 中,逗号只要出现在"下一个键之前"就是有效的,因此你可以把逗号写在键的前一行末尾,也可以写在键的同一行之前。这种"前导逗号"风格虽然不常见,但语法上完全合法。
6. 空白无关紧要:英文原文 json.md 中还专门演示了"whitespace": "Does not matter.",说明 JSON 解析器会忽略键与值之间的空格、换行和缩进——缩进纯粹是为了人类可读性,并非语法要求。
注释与兼容性陷阱:尾随逗号
教程明确指出了一个常见认知误区:JSON 在最纯粹的形式下没有注释,但绝大多数解析器会接受 C 语言风格的注释(//行注释与/* */块注释)。然而,依赖注释会破坏 JSON 的跨实现兼容性,因此教程选择全程使用 100% 有效、不含任何注释的 JSON 来讲解。
英文原文 json.md 进一步补充了另一个兼容性细节:部分解析器容忍尾随逗号(即在数组最后一个元素或对象最后一个属性之后多写一个逗号),但为了更好的兼容性应当避免使用。这一点在团队协作和跨语言解析场景中尤其重要——例如 Python 的json标准库在解析带尾随逗号的 JSON 时会直接抛出语法错误,而部分 JavaScript 引擎则能容忍。
仓库实践:文档如何被组织与校验
作为 Learn X in Y Minutes 仓库的一部分,cs/json.md遵循统一的文档组织规范:每个 Markdown 文件顶部都带有 YAML 前端元数据(front matter),声明贡献者(contributors)与翻译者(translators)。例如捷克语版记录了原贡献者 Anna Harren、Marco Scannadinari,以及翻译者 Vojta Svoboda。
仓库提供了配套校验脚本 lint/frontmatter.py(运行时依赖见 lint/requirements.txt),它会对每个 Markdown 文件的 YAML 前端元数据做三层检查:
- 语法检查:使用 yamllint 对 front matter 进行 YAML 语法 lint;
- 键名白名单校验:只允许
name、where_x_eq_name、category、filename、contributors、translators这六个键,出现其他键会报Invalid keys found; - 值类型校验:例如
contributors与translators必须是列表,列表内每一项又必须是列表,且首元素必须是字符串(人名),第二元素(可选)也必须是字符串(链接),超过两个元素的项会被判定为非法。
从这一实现可以推断,仓库对文档元数据的规范性有严格要求:既保证作者署名完整可追溯,也保证每个教程文件能被工具链稳定解析。这从侧面印证了 JSON 教程所强调的理念——结构化的、无歧义的文本格式,是一切可靠工具链的基础。
更多语言版本与继续学习路径
JSON 是 Learn X in Y Minutes 中翻译版本最多的主题之一。除了捷克语版 cs/json.md 和英文原文 json.md,仓库中还收录了德语 de/json.md、西班牙语 es/json.md、法语 fr/json.md、意大利语 it/json.md、日语 ja/json.md、韩语 ko/json.md、俄语 ru/json.md、中文 zh-cn/json.md 等多个语言的版本,读者可以对照阅读同一份 JSON 语法在不同语言中的表述方式,加深理解。如果你希望在本地运行或验证教程中的示例,只需将代码块保存为.json文件,再使用任意标准 JSON 解析器(如python -m json.tool)即可完成校验。
- 文档
- 教程
【免费下载链接】learnxinyminutes-docs
Code documentation written as code! How novel and totally my idea!
相关推荐
Learn X in Y minutes:德语版 C 完整语法速成教程(LearnCSharp.cs 源码逐段精讲)
Learn X in Y minutes:德语版 C 完整语法速成教程(LearnCSharp.cs 源码逐段精讲) C 是一门优雅、类型安全且面向对象的语言,
文档教程Cap'n Proto 1.5.0 安全发布:v1.5 rollup 安全通告全解析与修复指南
Cap'n Proto 1.5.0 安全发布:v1.5 rollup 安全通告全解析与修复指南 导读 本文围绕 Cap'n Proto 官方发布于 securi
文档教程ColdFusion 入门指南:从 CFML 标签语法到 CFScript 脚本(Learn X in Y minutes)
ColdFusion 入门指南:从 CFML 标签语法到 CFScript 脚本(Learn X in Y minutes) ColdFusion 是一种面向
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考