如何从Go结构体动态生成指定格式JSON并追加元素?
解决方法
你的问题在于每次循环都重新创建了一个actors实例,导致每次生成的JSON都是独立的对象。要生成包含所有元素的单个JSON,需要初始化一次结构体,然后循环向Data切片中追加元素,最后统一序列化整个结构体。
修改后的代码
numberOfActCnt := 0 numberOfColParsed := 0 numberOfColumns := 3 // 初始化一个空的actors实例,Data切片初始化为空 var act actors act.Data = make([][]interface{}, 0) for i := 0; i < 2; i++ { numberOfActCnt = numberOfActCnt + numberOfColParsed // 构造当前演员的条目:[序号, [名, 姓]] actorEntry := []interface{}{ i, []string{rec.records[numberOfActCnt].value, rec.records[numberOfActCnt+1].value}, } // 将条目追加到Data切片中 act.Data = append(act.Data, actorEntry) numberOfColParsed = numberOfColumns - 1 } // 循环结束后,统一序列化整个结构体 re, _ := json.Marshal(act) fmt.Println(string(re))
改动说明
- 不再每次循环创建新的
actors实例,而是复用同一个实例,通过append向Data切片添加元素。 - 把JSON序列化操作移到循环外,只执行一次,这样就能得到包含所有元素的单个JSON对象。
- 去掉了无用的
res []actors变量,简化代码结构。
执行这段代码后,输出就会和你期望的目标格式一致:
{"data":[[0,["Brendan","Fraser"]],[1,["Keanu","Reeves"]]]}
内容的提问来源于stack exchange,提问作者Navidk
相关产品推荐
相关产品推荐

