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

如何将map[string]interface{}打印为JSON?及sqlx MapScan格式化问题

解决map[string]interface{}转JSON格式输出及sqlx格式化问题

嘿,我来帮你搞定这两个问题!

1. 如何将map[string]interface{}打印为JSON格式?

Go标准库的encoding/json包就能完美解决这个需求:

  • 用json.Marshal()可以生成紧凑的单行JSON字符串
  • 用json.MarshalIndent()可以生成带缩进、结构清晰的JSON,可读性更强

举个简单的示例:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    data := map[string]interface{}{
        "USER_ID":   "JD",
        "USER_NAME": "John Doe",
    }
    // 生成带缩进的JSON
    jsonStr, err := json.MarshalIndent(data, "", "  ")
    if err != nil {
        fmt.Println("序列化失败:", err)
        return
    }
    fmt.Println(string(jsonStr))
}

输出的标准JSON格式如下:

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

2. 针对你的sqlx代码的修改方案

你当前用%#v输出的是Go语言的map字面量格式,要改成JSON格式,直接在循环里替换成JSON序列化逻辑就行,同时别忘了完善错误处理和资源释放:

rows, err := db.Queryx(query)
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}
defer rows.Close() // 确保rows资源被正确释放

for rows.Next() {
    results := make(map[string]interface{})
    err = rows.MapScan(results)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    // 将map序列化为带缩进的JSON
    jsonData, err := json.MarshalIndent(results, "", "  ")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    // 将JSON输出到响应流
    fmt.Fprintln(w, string(jsonData))
}

// 检查遍历rows过程中是否出现错误
if err := rows.Err(); err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

修改后,输出结果就会变成标准的JSON格式,而不是Go的map语法。如果不需要缩进,把json.MarshalIndent换成json.Marshal即可,生成的是一行紧凑的JSON字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:23