背景
因为项目上要求,在做数据推送的时候需要根据json的内容将不同的数据推送到不同的地址中,所以我开发了这个rule条件的配置插件,根据rule的配置可以搜索出满足条件的json数据,然后根据项目中配置的推送地址将数据推送出去。
Json条件检索
go语言,通过rule条件筛选出json是否可用。可以在批量的json中快速筛选出满足条件的json。
数据筛选支持多层数据搜索,可以通过.进行多层惊悚node分割,也可以对数组进行搜索。代码可能存在很多不足,请大家多多指点共同进步,希望大家能一起参与进来。
example中有试用方式请参考试用。
Rule协议
条件运算符: | 说明: |
---|---|
and | 等于,操作数据等于对象中的数据 |
or | 或,操作数据或,等于其中一个即可 |
not | 不等于,操作数据不等于对象中的数据 |
gt | 大于,操作数据大于对象中的数据,必须为int或float类型的数据 |
gte | 大于等于,操作数据大于或等于对象中的数据,必须为int或float类型的数据 |
lt | 小于,操作数据小于对象中的数据,必须为int或float类型的数据 |
lte | 小于等于,操作数据小于或等于对象中的数据,必须为int或float类型的数据 |
like | 模糊,操作数据会模糊查询对象中定义的数据前、后、中间出现过大于一次的命中,必须为string类型 |
协议示例
{ "and": { "projectId": "10001", "code": "test-push" }, "or": { "projectId": "10001", "code": "test-push" }, "not": { "projectId": "10001", "code": "test-push" }, "gt": { "age": 10, "number": 5 }, "gte": { "age": 10, "number": 5 }, "lt": { "age": 10, "number": 5 }, "lte": { "age": 10, "number": 5 }, "like": { "name": "你好" } }
Data数据
data为rule筛选的数据源。
{ "projectId": "10001", "code": "test-push", "name": "xiaoming", "days": [ "one", "two", "three" ] }
介绍完毕直接上demo
package main
import (
"fmt"
jCondition "github.com/liuz-code/json-condition"
)
func main() {
//----------------and
// data := "{\"projectId\":\"10001\",\"code\":\"test-push\",\"productCode\":\"cvforce\",\"class\":{\"name\":\"小明\"}}"
// rule := "{\"and\":{\"projectId\":\"10001\",\"code\":\"test-push\",\"class.name\":\"小明\"}}"
//----------------or
// data := "{\"projectId\":\"10001\",\"code\":\"test-push\",\"productCode\":\"cvforce\"}"
// rule := "{\"or\":{\"projectId\":\"10001\",\"code\":\"test-push1111\"}}"
//----------------not
// data := "{\"projectId\":\"10001\",\"code\":\"test-push\",\"productCode\":\"cvforce\"}"
// rule := "{\"not\":{\"projectId\":\"10004\",\"code\":\"test-push1111\"}}"
//----------------gt
// data := "{\"age\":15,\"year\":2024}"
// rule := "{\"gt\":{\"age\":11,\"year\":2023}}"
//----------------gte
// data := "{\"age\":15,\"year\":2024}"
// rule := "{\"gte\":{\"age\":15,\"year\":2023}}"
//----------------lt
// data := "{\"age\":15,\"year\":2024}"
// rule := "{\"lt\":{\"age\":16,\"year\":2025}}"
//----------------lte
// data := "{\"age\":15,\"year\":2024}"
// rule := "{\"lte\":{\"age\":16,\"year\":2024}}"
//----------------like
// data := "{\"projectId\":\"10001\",\"code\":\"test-push\",\"name\":\"xiaoming\"}"
// rule := "{\"like\":{\"name\":\"ao\"}}"
//----------------and like
data := "{\"projectId\":\"10001\",\"code\":\"test-push\",\"name\":\"xiaoming\",\"days\":[\"one\",\"two\",\"three\"]}"
rule := "{\"like\":{\"name\":\"ao\"},\"and\":{\"projectId\":\"10001\",\"days.[0]\":\"one\"}}"
var d jCondition.JsonCondition
b, err := d.JsonCheck(data, rule)
fmt.Println("check:", b, ", err:", err)
}
程序会根据rule配置判断出data节点中的数据是否满足条件。
数据来源:GitHub - liuz-code/json-condition: go语言,通过条件筛选出json是否满足。可以在批量的json中快速筛选出满足条件的json。