feat: 新增业务字段路径读写工具
新增 TakeBusinessFields、WriteBusinessFields、SetByPath 与 GetByPath 等工具,支持按映射路径写入请求体与解析响应,并更新相关依赖。
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/tidwall/sjson"
|
||||
)
|
||||
|
||||
// IsFlatMap 递归判断 map 是否扁平化
|
||||
func IsFlatMap(m map[string]interface{}) bool {
|
||||
for _, v := range m {
|
||||
switch val := v.(type) {
|
||||
case map[string]interface{}:
|
||||
return false
|
||||
case []interface{}:
|
||||
for _, item := range val {
|
||||
if _, ok := item.(map[string]interface{}); ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// UnFlatBySjson 将扁平路径映射还原为嵌套 JSON
|
||||
func UnFlatBySjson(flatMap map[string]interface{}) (map[string]interface{}, error) {
|
||||
raw := "{}"
|
||||
for path, val := range flatMap {
|
||||
var err error
|
||||
raw, err = sjson.Set(raw, path, val)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("sjson set path %s failed: %w", path, err)
|
||||
}
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(raw), &result); err != nil {
|
||||
return nil, fmt.Errorf("parse final json failed: %w", err)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user