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 }