feature/upgrade_filter #7
@ -90,6 +90,23 @@ func String(sourceValue gjson.Result, defaultValue string) string {
|
||||
return sourceValueStr
|
||||
}
|
||||
|
||||
// MapAnyAny ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 17:48 2024/12/1
|
||||
func MapAnyAny(sourceValue gjson.Result) (map[string]any, error) {
|
||||
if !sourceValue.IsObject() {
|
||||
return nil, ErrDataIsNotObject
|
||||
}
|
||||
res := make(map[string]any)
|
||||
sourceValue.ForEach(func(key, value gjson.Result) bool {
|
||||
res[key.String()] = value
|
||||
return true
|
||||
})
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Any 获取任意类型的值
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
@ -109,12 +126,10 @@ func Any(sourceValue gjson.Result) (any, error) {
|
||||
return res, nil
|
||||
}
|
||||
if sourceValue.IsObject() {
|
||||
// 对象不管什么类型的key, 统一转成 map[string]any
|
||||
res := make(map[string]any)
|
||||
sourceValue.ForEach(func(k, v gjson.Result) bool {
|
||||
res[k.String()] = v
|
||||
return true
|
||||
})
|
||||
return MapAnyAny(sourceValue)
|
||||
}
|
||||
if sourceValue.IsArray() {
|
||||
return SliceAny(sourceValue)
|
||||
}
|
||||
return sourceValue.Value(), nil
|
||||
|
||||
@ -140,6 +155,28 @@ func getRealDataType(dataType consts.DataType, sourceValue gjson.Result) consts.
|
||||
return dataType
|
||||
}
|
||||
|
||||
// SliceAny ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 17:53 2024/12/1
|
||||
func SliceAny(gjsonResult gjson.Result) ([]any, error) {
|
||||
if gjsonResult.Value() == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
strVal := strings.TrimSpace(gjsonResult.String())
|
||||
// 任意类型的list
|
||||
if strings.HasPrefix(strVal, "[") && strings.HasSuffix(strVal, "]") {
|
||||
// 序列化之后的数组
|
||||
sliceVal := wrapper.String(strVal).ToAnySlice()
|
||||
return sliceVal.Value, sliceVal.Err
|
||||
}
|
||||
// 分隔的数组
|
||||
sliceVal := wrapper.String(strVal).ToAnySlice(",")
|
||||
return sliceVal.Value, sliceVal.Err
|
||||
}
|
||||
|
||||
// SliceInt 获取int list
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
@ -149,7 +186,6 @@ func SliceInt(gjsonResult gjson.Result) ([]int64, error) {
|
||||
if gjsonResult.Value() == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
strVal := strings.TrimSpace(gjsonResult.String())
|
||||
// 任意类型的list
|
||||
if strings.HasPrefix(strVal, "[") && strings.HasSuffix(strVal, "]") {
|
||||
@ -272,6 +308,28 @@ func SliceMapStringAny(gjsonResult gjson.Result) ([]map[string]any, error) {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// SliceSlice ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 17:44 2024/12/1
|
||||
func SliceSlice(gjsonResult gjson.Result) ([][]any, error) {
|
||||
if gjsonResult.Value() == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
strVal := strings.TrimSpace(gjsonResult.String())
|
||||
// 任意类型的list
|
||||
if !strings.HasPrefix(strVal, "[") || !strings.HasSuffix(strVal, "]") {
|
||||
return nil, ErrDataIsNotArray
|
||||
}
|
||||
var res [][]any
|
||||
if err := serialize.JSON.UnmarshalWithNumber([]byte(strVal), &res); nil != err {
|
||||
return nil, err
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Value 获取指定的值
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
@ -281,6 +339,8 @@ func Value(dataType consts.DataType, sourceValue gjson.Result, defaultValue any)
|
||||
if !sourceValue.Exists() {
|
||||
return defaultValue, nil
|
||||
}
|
||||
// 归一化处理对象、数组等
|
||||
sourceValue = Result(sourceValue)
|
||||
dataType = getRealDataType(dataType, sourceValue)
|
||||
strVal := wrapper.String(sourceValue.String())
|
||||
switch dataType {
|
||||
@ -316,8 +376,10 @@ func Value(dataType consts.DataType, sourceValue gjson.Result, defaultValue any)
|
||||
case consts.DataTypeSliceString, consts.DataTypeSliceStringWithChar:
|
||||
// 任意类型的list
|
||||
return SliceString(sourceValue)
|
||||
case consts.DataTypeSliceSlice, consts.DataTypeMapAnyAny:
|
||||
return nil, errors.New(consts.DataTypeSliceSlice.String() + " : data type is not support")
|
||||
case consts.DataTypeSliceSlice:
|
||||
return SliceSlice(sourceValue)
|
||||
case consts.DataTypeMapAnyAny:
|
||||
return MapAnyAny(sourceValue)
|
||||
case consts.DataTypeSliceMapStringAny:
|
||||
return SliceMapStringAny(sourceValue)
|
||||
case consts.DataTypeMapStrInt:
|
||||
|
Loading…
Reference in New Issue
Block a user