☰
JSON 数据交换格式完整语法指南——Learn X in Y Minutes 捷克语教程解析
2026/10/5 2:22:33 网站建设 项目流程
  • 文档
  • 教程

【免费下载链接】learnxinyminutes-docs

Code documentation written as code! How novel and totally my idea!

项目地址:https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs
点击查看免费下载

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!

项目地址:https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs
点击查看免费下载
上一篇:Beads 仓库 Contributor PR 指南:从分层哲学到可过审的 Pull Request 实操手册
下一篇:LeRobot SO-101 完整指南:从零件采购、机械臂组装、电机配置到校准

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询