You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归转换map[string]interface{}中的[]interface{}为[]map[string]interface{}

递归转换嵌套[]interface{}为[]map[string]interface{}适配go-xlsx-templater

当然可以通过递归遍历实现自动转换,核心逻辑是深度遍历数据结构,针对性处理嵌套的数组和map:

  • 遇到map[string]interface{}时,递归处理其每个键值对
  • 遇到[]interface{}时,遍历数组元素,将每个map类型的元素转换后存入[]map[string]interface{}
  • 其他基础类型直接保留

示例实现代码

func transformData(data interface{}) interface{} {
	switch v := data.(type) {
	case map[string]interface{}:
		for key, val := range v {
			v[key] = transformData(val)
		}
		return v
	case []interface{}:
		var transformedSlice []map[string]interface{}
		for _, item := range v {
			if itemMap, ok := item.(map[string]interface{}); ok {
				transformedSlice = append(transformedSlice, transformData(itemMap).(map[string]interface{}))
			}
			// 若数组元素非map类型,可根据需求补充处理逻辑(如保留原元素、抛出错误等)
		}
		return transformedSlice
	default:
		return v
	}
}

使用方式

将JSON解析后的map[string]interface{}传入函数,即可得到符合要求的结构:

// 假设parsedJSON是解析后的原始数据
adaptedData := transformData(parsedJSON).(map[string]interface{})

这个递归函数会自动处理所有层级的嵌套结构,完全替代手动转换的重复工作。如果业务场景中存在数组元素非map的情况,可在对应分支补充适配逻辑。

内容的提问来源于stack exchange,提问作者jcromanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:18:39