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

如何使用Golang将PostgreSQL查询的SQL行数据打印为标准JSON格式

问题原因

json.Marshal() 方法返回两个返回值:第一个是序列化后的[]byte类型字节数组,第二个是序列化过程中产生的错误。你直接将两个返回值传给fmt.Println()打印,自然会输出字节数组的原始数值和nil错误,而不是人类可读的JSON字符串。

解决方案

根据你的需求可以选择两种实现方式:

方式1:打印单行压缩JSON

将返回的字节数组转换为字符串即可,记得处理错误:

// 替换原来的 fmt.Println(json.Marshal(users))
data, err := json.Marshal(users)
if err != nil {
    fmt.Printf("序列化JSON失败: %v\n", err)
    return
}
fmt.Println(string(data))

方式2:打印带缩进的格式化JSON

如果你需要和示例中一样带换行、缩进的美观格式,使用json.MarshalIndent()方法即可,第二个参数是每行前缀,第三个参数是缩进符号,示例用4个空格作为缩进:

// 替换原来的 fmt.Println(json.Marshal(users))
data, err := json.MarshalIndent(users, "", "    ")
if err != nil {
    fmt.Printf("序列化JSON失败: %v\n", err)
    return
}
fmt.Println(string(data))
修改后完整的PostgresTest函数参考
func PostgresTest() {
    DB, err = gorm.Open(postgres.Open(DNS), &gorm.Config{})
    if err != nil {
        fmt.Println(err.Error())
        panic("Cannot connect to DB")
    }
    
    var users []User
    
    DB.Limit(2).Find(&users)
    // 序列化带缩进的JSON
    data, err := json.MarshalIndent(users, "", "    ")
    if err != nil {
        fmt.Printf("序列化JSON失败: %v\n", err)
        return
    }
    fmt.Println(string(data))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:54:02