准备从头梳理和改善 Karabiner-Element 的配置文件,特意找了关于 JSON 的一些资源,以下为笔记,以备后用。

什么是 JSON

JSON 的全称是 Javascript Object Notation,翻译成中文便是 Javascript 对象表示法。虽然名字里面有 Javascript,但并不意味着学习 JSON 之前得学习 JavaScript,即使你完全不了解,甚至没听过 JavaScript 也不影响你学习和使用 JSON。

JSON 只是源于 JavaScript 中的一个子集,主要作为一种数据交换格式存在,独立于编程语言。

JSON 的语法

在一对花括号 {} 中包裹着以冒号 : 分隔的元素,便是 JSON 的基本语法:

{
  "number" : 42
}

"number" : 42 的表示方法称为键值对,或者叫字典,是 JSON 的基本数据结构。如你所见,键值对以冒号分隔,键在左,值在右,其中键必须使用双引号包裹,而值则为字符串时,才需要使用双引号,如数字就无需双引号包裹。

符号用途:

  • ,:元素之间的分割符;
  • ::键值对的分割符;
  • []:表示数组
  • {}:表示对象

注:

  • JSON 文件的后缀为 .json
  • JSON 只有数组和对象两种数据结构;
  • 多个键值对用逗号 , 隔开,最后一个值可省略逗号;
  • 键名最好仅使用英文名称,多个英文之间可使用小驼峰命名法;

在 JSON 中的数据类型,即键值对中所支持的数据类型(键只能为字符串),先从简单的开始:

  • 数字
    • 支持整数、小数、负数
  • 布尔值
    • true、false
  • null
    • null,表示没有值

数字、布尔值和 null 均无需双引号包裹,后两者必须小写。另外除了以上三种之外,还有 字符串对象数组

字符串

字符串应该是 JSON 中使用最多的数据类型,可以由任意 Unicode 字符构成,两边必须被双引号包裹。如果在字符串中需要使用双引号,则必须使用反斜线转义:\",除了双引号之外,还有一些字符需要转义:

  • 反斜线:\\
  • 正斜线:\/
  • 换行符:\n
  • 回车符:\r
  • 换页符:\f
  • 制表符:\t
  • 十六进制字符:\u

对象

JSON 中的对象,即 JSON 本身,也就说嵌套的 JSON 即为对象:

{
    "json": {
        "num" : 42,
        "type : "int"
    }
}

数组

数组使用方括号 [] 包裹,可以包含所有 JSON 支持的值类型,使用逗号 , 分隔:

{
    "arrs": [
        42,
        null,
        "num"
    ]
}

注:

  • 数组是有序集合;
  • 数组索引从 0 开始;
  • 对象和数组均可以互相嵌套;

作为配置文件

基本语法和数据结构是作为配置文件的 JSON 仅需了解的信息,在不同应用,可能会支持更多功能,如在 Karabiner-Element 中,还支持 if 语法。如果需要更深入的了解,可以参考《JSON 必知必会》,里面的讲解相当全面。

相比同作为配置文件的 INI 格式和 XML,JSON 在保持着较好的可读性下,能表示更复杂的信息,当然 JSON 并不一定是最优选择,在能自主选择的情况下,应优先考虑的是需要存储的数据和语言,再根据实际情况选择合适的工具,不过像 JSON 同 JavaScript 的确是黄金搭档。

参考