准备从头梳理和改善 Karabiner-Element 的配置文件,特意找了关于 JSON 的一些资源,以下为笔记,以备后用。
什么是 JSON
JSON 的全称是 Javascript Object Notation,翻译成中文便是 Javascript 对象表示法。虽然名字里面有 Javascript,但并不意味着学习 JSON 之前得学习 JavaScript,即使你完全不了解,甚至没听过 JavaScript 也不影响你学习和使用 JSON。
JSON 只是源于 JavaScript 中的一个子集,主要作为一种数据交换格式存在,独立于编程语言。
JSON 的语法
在一对花括号 {}
中包裹着以冒号 :
分隔的元素,便是 JSON 的基本语法:
而 "number" : 42
的表示方法称为键值对
,或者叫字典,是 JSON 的基本数据结构。如你所见,键值对以冒号分隔,键在左,值在右,其中键必须使用双引号包裹,而值则为字符串时,才需要使用双引号,如数字就无需双引号包裹。
符号用途:
,
:元素之间的分割符;:
:键值对的分割符;[]
:表示数组{}
:表示对象
注:
- JSON 文件的后缀为
.json
- JSON 只有数组和对象两种数据结构;
- 多个键值对用逗号
,
隔开,最后一个值可省略逗号; - 键名最好仅使用英文名称,多个英文之间可使用小驼峰命名法;
数据类型
在 JSON 中的数据类型,即键值对中值
所支持的数据类型(键只能为字符串),先从简单的开始:
- 数字
- 支持整数、小数、负数
- 布尔值
- true、false
- null
- null,表示没有值
数字、布尔值和 null 均无需双引号包裹,后两者必须小写。另外除了以上三种之外,还有 字符串
、对象
和数组
。
字符串
字符串应该是 JSON 中使用最多的数据类型,可以由任意 Unicode 字符构成,两边必须被双引号包裹。如果在字符串中需要使用双引号,则必须使用反斜线转义:\"
,除了双引号之外,还有一些字符需要转义:
- 反斜线:
\\
- 正斜线:
\/
- 换行符:
\n
- 回车符:
\r
- 换页符:
\f
- 制表符:
\t
- 十六进制字符:
\u
对象
JSON 中的对象,即 JSON 本身,也就说嵌套的 JSON 即为对象:
数组
数组使用方括号 []
包裹,可以包含所有 JSON 支持的值类型,使用逗号 ,
分隔:
注:
- 数组是有序集合;
- 数组索引从 0 开始;
- 对象和数组均可以互相嵌套;
作为配置文件
基本语法和数据结构是作为配置文件的 JSON 仅需了解的信息,在不同应用,可能会支持更多功能,如在 Karabiner-Element 中,还支持 if 语法。如果需要更深入的了解,可以参考《JSON 必知必会》,里面的讲解相当全面。
相比同作为配置文件的 INI 格式和 XML,JSON 在保持着较好的可读性下,能表示更复杂的信息,当然 JSON 并不一定是最优选择,在能自主选择的情况下,应优先考虑的是需要存储的数据和语言,再根据实际情况选择合适的工具,不过像 JSON 同 JavaScript 的确是黄金搭档。