package lzUtils import ( "encoding/json" "github.com/bytedance/sonic" ) func RecursiveParse(data interface{}) (interface{}, error) { switch v := data.(type) { case string: // 尝试解析字符串是否为嵌套 JSON var parsed interface{} if err := sonic.Unmarshal([]byte(v), &parsed); err == nil { return RecursiveParse(parsed) } return v, nil // 普通字符串直接返回 case map[string]interface{}: for key, val := range v { parsed, err := RecursiveParse(val) if err != nil { return nil, err } v[key] = parsed } return v, nil case []interface{}: for i, item := range v { parsed, err := RecursiveParse(item) if err != nil { return nil, err } v[i] = parsed } return v, nil default: return v, nil } } // ParseJsonResponse 直接解析JSON响应数据 // jsonResp: JSON响应数据 // Returns: 解析后的数据字节数组 func ParseJsonResponse(jsonResp []byte) ([]byte, error) { parseResult, err := RecursiveParse(string(jsonResp)) if err != nil { return nil, err } resultResp, marshalErr := json.Marshal(parseResult) if marshalErr != nil { return nil, err } return resultResp, nil }