36 lines
		
	
	
		
			752 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			752 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package lzUtils
 | |
| 
 | |
| import "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
 | |
| 	}
 | |
| }
 |