57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
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
|
|
}
|