完成数据过主干逻辑,细节健壮性有待继续完善 #4
24
tool/gabs.go
24
tool/gabs.go
@ -21,6 +21,10 @@ import (
|
||||
"github.com/Jeffail/gabs"
|
||||
)
|
||||
|
||||
const (
|
||||
virtualRoot = "__virtual__root"
|
||||
)
|
||||
|
||||
// FilterDataRule 参数过滤规则
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
@ -39,6 +43,19 @@ type FilterDataRule struct {
|
||||
//
|
||||
// Date : 2022/1/22 9:50 PM
|
||||
func NewDataFilter(source string, filterRule []*FilterDataRule) *DataFilter {
|
||||
|
||||
jsonTree := gjson.Parse(source)
|
||||
isVirtual := false
|
||||
if jsonTree.IsArray() {
|
||||
source = fmt.Sprintf(`{"%v":%v}`, virtualRoot, source)
|
||||
isVirtual = true
|
||||
}
|
||||
if isVirtual {
|
||||
for _, item := range filterRule {
|
||||
item.MapKey = virtualRoot + "." + item.MapKey
|
||||
item.SourceKey = virtualRoot + "." + item.SourceKey
|
||||
}
|
||||
}
|
||||
return &DataFilter{
|
||||
source: source,
|
||||
filterRule: filterRule,
|
||||
@ -56,6 +73,7 @@ type DataFilter struct {
|
||||
filterRule []*FilterDataRule
|
||||
itemKeyToSlice bool
|
||||
hasDealDiffPath map[string]string
|
||||
isVirtualRoot bool
|
||||
}
|
||||
|
||||
// Filter 数据过滤
|
||||
@ -116,7 +134,11 @@ func (df *DataFilter) Filter() (string, error) {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
return jsonObject.String(), nil
|
||||
final := jsonObject.String()
|
||||
if df.isVirtualRoot {
|
||||
return gjson.Get(final, virtualRoot).String(), nil
|
||||
}
|
||||
return final, nil
|
||||
}
|
||||
|
||||
// UserItemToSlice 支持多个独立的字段合并到slice中
|
||||
|
Loading…
Reference in New Issue
Block a user