feats:custom the key missing condition
This commit is contained in:
@@ -9,11 +9,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type ConditionOperation struct {
|
type ConditionOperation struct {
|
||||||
Path string `json:"path"` // JSON路径
|
Path string `json:"path"` // JSON路径
|
||||||
Mode string `json:"mode"` // full, prefix, suffix, contains, gt, gte, lt, lte
|
Mode string `json:"mode"` // full, prefix, suffix, contains, gt, gte, lt, lte
|
||||||
Value interface{} `json:"value"` // 匹配的值
|
Value interface{} `json:"value"` // 匹配的值
|
||||||
Invert bool `json:"invert"` // 反选功能,true表示取反结果
|
Invert bool `json:"invert"` // 反选功能,true表示取反结果
|
||||||
|
PassMissingKey bool `json:"pass_missing_key"` // 未获取到json key时的行为
|
||||||
}
|
}
|
||||||
|
|
||||||
type ParamOperation struct {
|
type ParamOperation struct {
|
||||||
@@ -99,6 +99,9 @@ func tryParseOperations(paramOverride map[string]interface{}) ([]ParamOperation,
|
|||||||
if invert, ok := condMap["invert"].(bool); ok {
|
if invert, ok := condMap["invert"].(bool); ok {
|
||||||
condition.Invert = invert
|
condition.Invert = invert
|
||||||
}
|
}
|
||||||
|
if passMissingKey, ok := condMap["pass_missing_key"].(bool); ok {
|
||||||
|
condition.PassMissingKey = passMissingKey
|
||||||
|
}
|
||||||
operation.Conditions = append(operation.Conditions, condition)
|
operation.Conditions = append(operation.Conditions, condition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -150,6 +153,9 @@ func checkConditions(jsonStr string, conditions []ConditionOperation, logic stri
|
|||||||
func checkSingleCondition(jsonStr string, condition ConditionOperation) (bool, error) {
|
func checkSingleCondition(jsonStr string, condition ConditionOperation) (bool, error) {
|
||||||
value := gjson.Get(jsonStr, condition.Path)
|
value := gjson.Get(jsonStr, condition.Path)
|
||||||
if !value.Exists() {
|
if !value.Exists() {
|
||||||
|
if condition.PassMissingKey {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user