新增 TakeBusinessFields、WriteBusinessFields、SetByPath 与 GetByPath 等工具,支持按映射路径写入请求体与解析响应,并更新相关依赖。
44 lines
951 B
Go
44 lines
951 B
Go
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
|
|
}
|