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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:47:14