GKD规则编写之属性-1
0. 前言
本教程不会有太多的图,大多数是理论讲解。
那么,现在先来解释下什么叫属性
:
属性
,是GKD的专有名词。由于GKD的规则采用JSON
(为方便表述,下文的JSON
包含JSON5
和TypeScript
)编写,那么有接触过JSON
的就能很轻松地理解属性
了,不会JSON
的也不用慌,每个属性
的介绍都会给出它的用法示例,JSON
的概念也会同时说明,简直赚翻天,一篇教程,两种知识。
那么给没有接触过JSON
的同学介绍下:
在JSON
中,通常一个完整的语句由一个键值对
组成
何为键值对
?就是指由键
和值
组成的形如下方这样的语句:
键: 值
键值对
间用,
分隔。
那么属性
是什么?属性
就是键值对
中的键
。
了解了这些之后,我们就先来学习几个在规则编写中必需的属性
。
需知:本教程采用JSON5
1. 正文
1.1 id
id
属性是GKD识别应用的关键,一般而言是应用的包名。
其用法为:
id: '应用的id'
1.2 name
不同于属性选择器
中的name属性
,这里的name
指的是应用名称。
其用法为:
name: '应用名称'
1.3 groups
从这里开始,我们引出一个概念:列表
。
1.3.1 列表
打开GKD的默认订阅,再随便点开一个应用,你可以发现里面是这样的:
每一个开关就对应一个规则组,这么多个规则组组合起来就组成了列表。
总而言之就是:一个应用就是一个列表,列表中有很多的规则组。
1.3.2 定义
groups
的值应是一个数组,数组内应包含对象。
数组就代表一个列表,每一个对象都是一个规则组。
在JSON
中,数组由一对[]
包裹。那对象又是什么?
对象由一对{}
包裹,其内是一个无序的键值对
集合
例如:
{
name: '张三',
birthday: '2000.1.1',
}
与
{
birthday: '2000.1.1',
name: '张三',
}
是等价的。
1.3.3 用法
其用法为:
groups: [
{...},{...}
]
1.4 key
从这里开始,除特殊说明外,下面包括以后的所有属性
都位于groups
内的对象内部。
先看官方定义:
当前规则组在列表中的唯一标识,也是客户端禁用/启用此规则组的依据
key
属性,表示该规则组在列表中的唯一标识,可以理解为规则组在列表中的身份证。
1.4.1 用法
那么key
属性的用法是什么呢?
它的用法就是:
key: 常整数
1.4.2 注意事项
要注意:每一个列表中有且只能有一个相同的key
值,
即:如果列表中已经存在了key: 1
,那么就不能再有第二个key: 1
。
1.5 name
你可能会很疑惑,为什么又有一个name
?
这两个name
因为其所处位置的不同,其意义也不同。
1.2介绍的name
与groups
是同一级,表示的是应用名称;
而本节的name
位于groups
内,表示的是规则组名称。
其用法为:
groups: [
{
name: '规则组名称'
}
]
1.6 rules
rules
属性与groups
属性雷同,它们的值都是数组,数组内部都是对象。
但是与groups
不同的是,groups
的数组表示一个列表,而rules
的数组表示规则组内的子规则集(非官方说法)。怎么去理解?
每个对象都是一个子规则
,这些对象共同构成一个数组,就是子规则集
1.6.1 用法
其用法如下:
groups: [
{
rules: [
{...}
]
}
]
1.6.2 特殊情况
rules
属性在特殊情况下可以简写。
在rules
的值数组内,有且只有一个对象时,可以简写为下面的样子:
groups: [
{
rules: '规则'
}
]
1.7 matches
以下属性
在一般情况下位于rules
内部
matches
属性的值是由选择器
组成的一条或多条字符串(也就是常说的规则
),如果是多条字符串,那么matches
的值为一个数组。
1.7.1 用法
其用法如下:
当值为一条字符串时:
groups: [ { rules: [ { matches: '规则' } ] } ]
当值为多条字符串时:
groups: [ { rules: [ { matches: [ '规则1', '规则2', ... ] } ] } ]
1.8 综合运用
使用上面介绍的属性
,可以写出一个简单的模板。
{
id: '应用id',
name: '应用名称',
groups: [
{
key: 0,
rules: [
{
matches: '规则'
}
]
}
]
}
这个模板对于导入本地订阅的同学已经足够了,但是如果想要维护自己的订阅的话,这些是远远不够的。这就需要下篇的知识了。