GKD规则编写之属性-1

0. 前言

本教程不会有太多的图,大多数是理论讲解。

那么,现在先来解释下什么叫属性

属性,是GKD的专有名词。由于GKD的规则采用JSON(为方便表述,下文的JSON包含JSON5TypeScript)编写,那么有接触过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介绍的namegroups是同一级,表示的是应用名称;

而本节的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 用法

其用法如下:

  1. 当值为一条字符串时:

    groups: [
        {
            rules: [
                {
                    matches: '规则'
                }
            ]
        }
    ]
  2. 当值为多条字符串时:

    groups: [
        {
            rules: [
                {
                    matches: [
                        '规则1',
                        '规则2',
                        ...
                    ]
                }
            ]
        }
    ]

1.8 综合运用

使用上面介绍的属性,可以写出一个简单的模板。

{
    id: '应用id',
    name: '应用名称',
    groups: [
        {
            key: 0,
            rules: [
                {
                    matches: '规则'
                }
            ]
        }
    ]
}

这个模板对于导入本地订阅的同学已经足够了,但是如果想要为默认订阅添砖加瓦的话,这些是远远不够的。这就需要下篇的知识了。


GKD规则编写之属性-1
https://blog.adproqwq.top/2023/12/24/GKD规则编写之属性-1/
作者
Adpro
发布于
2023-12-24
许可协议