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

Golang生成合法JSON数组问题:单条JSON无分隔符与包裹方括号

解决Golang生成合法JSON数组的问题

我来帮你搞定这个生成合法JSON数组的问题!你现在的代码只是循环输出单个JSON对象,没有用方括号包裹,也没加逗号分隔,所以不是标准的JSON数组格式。这里有两种实用的解决方案,你可以根据实际场景选择:

方案一:先收集所有数据再序列化(适合小数据量)

如果从SQL取出的数据量不大,可以先把所有对象放到切片里,再用json.Marshal直接序列化整个切片——标准库会自动帮你处理数组的方括号和逗号分隔,省心又不容易出错:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// 模拟从SQL查询到的多条用户数据
	userList := []map[string]string{
		{"USER_ID": "JD", "USER_NAME": "John Doe"},
		{"USER_ID": "JD", "USER_NAME": "John Doe"},
		{"USER_ID": "JD", "USER_NAME": "John Doe"},
		{"USER_ID": "JD", "USER_NAME": "John Doe"},
	}

	// 直接序列化整个切片为合法的JSON数组
	jsonResult, err := json.Marshal(userList)
	if err != nil {
		fmt.Printf("JSON序列化失败: %v\n", err)
		return
	}

	fmt.Println(string(jsonResult))
}

运行这段代码会直接输出标准JSON数组:

[{"USER_ID":"JD","USER_NAME":"John Doe"},{"USER_ID":"JD","USER_NAME":"John Doe"},{"USER_ID":"JD","USER_NAME":"John Doe"},{"USER_ID":"JD","USER_NAME":"John Doe"}]

方案二:流式构建JSON数组(适合大数据量)

如果从SQL取出的数据量很大,不想把所有数据都加载到内存里,可以手动流式输出JSON数组的结构:先输出开头的[,然后循环输出每个序列化后的对象,除了第一个对象外,前面加逗号,最后输出结尾的]:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// 输出数组开头
	fmt.Print("[")

	for i := 0; i < 4; i++ {
		// 模拟从SQL逐行读取的数据
		user := map[string]string{
			"USER_ID":   "JD",
			"USER_NAME": "John Doe",
		}

		userJson, err := json.Marshal(user)
		if err != nil {
			fmt.Printf("\nJSON序列化失败: %v\n", err)
			return
		}

		// 除了第一个元素,前面加逗号分隔
		if i > 0 {
			fmt.Print(",")
		}
		// 输出当前对象的JSON
		fmt.Print(string(userJson))
	}

	// 输出数组结尾并换行
	fmt.Println("]")
}

这种方式的好处是内存占用低,适合处理大量数据的场景,比如从SQL分批读取数据时,边读边输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:46