如何使用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
相关产品推荐
相关产品推荐

