golang格式化打印json

一、背景与作用

在 Go 项目中,经常需要把结构体、map 等数据序列化为 JSON,用于:

打日志(debug)

写文件(配置 / 结果快照)

排查复杂嵌套数据(如告警、监控、Agent 返回)

encoding/json 提供了两种常用方式:

json.Marshal:紧凑 JSON,适合机器传输

json.MarshalIndent:格式化 JSON,适合人阅读

json.MarshalIndent 的核心目标只有一个:让 JSON 更可读,而不改变其语义。

go 复制代码
func json.MarshalIndent(v any, prefix, indent string) ([]byte, error)

1️⃣ v(待序列化对象)

可以是 struct、map、slice、嵌套组合

行为与 json.Marshal 完全一致

2️⃣ prefix(行前缀)

会加在 每一行的最前面

常见写法:""

偶尔用于日志对齐或嵌入输出

3️⃣ indent(缩进字符串)

每增加一层嵌套,就追加一次

go 复制代码
data := map[string]any{
    "id":   1,
    "name": "alert",
    "meta": map[string]any{
        "state": "alerting",
        "count": 3,
    },
}

b, err := json.MarshalIndent(data, "", "  ")
if err != nil {
    panic(err)
}

fmt.Println(string(b))

{
  "id": 1,
  "meta": {
    "count": 3,
    "state": "alerting"
  },
  "name": "alert"
}
相关推荐
小羊在睡觉2 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
GISer_Jing2 小时前
Three.js着色器编译机制深度解析
javascript·webgl·着色器
丷丩2 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
油炸自行车2 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
丷丩6 小时前
MapLibre GL JS第19课:实时更新要素
前端·javascript·gis·map·mapbox·maplibre gl js
xiaohua0708day7 小时前
Lodash库
前端·javascript·vue.js
突然好热7 小时前
TS 调试技巧
前端·javascript·typescript
h64648564h7 小时前
Flutter 国际化(i18n)全指南:一键切换中/英/日多语言
前端·javascript·flutter
丷丩9 小时前
MapLibre GL JS第8课:禁用滚动缩放
javascript·mapbox·maplibre gl js
kyriewen10 小时前
面试8家前端岗位后,我发现了一个残酷的事实:AI不是加分项,是门槛
前端·javascript·面试