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"
}
相关推荐
Hi_kenyon4 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
EndingCoder5 小时前
Any、Unknown 和 Void:特殊类型的用法
前端·javascript·typescript
JosieBook6 小时前
【Vue】09 Vue技术——JavaScript 数据代理的实现与应用
前端·javascript·vue.js
华仔啊8 小时前
JavaScript 如何准确判断数据类型?5 种方法深度对比
前端·javascript
程序员小寒9 小时前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
开发语言·前端·javascript·面试
爱健身的小刘同学9 小时前
Vue 3 + Leaflet 地图可视化
前端·javascript·vue.js
神秘的猪头9 小时前
Ajax 数据请求:从零开始掌握异步通信
前端·javascript
黛色正浓9 小时前
leetCode-热题100-贪心合集(JavaScript)
javascript·算法·leetcode
拾荒的小海螺10 小时前
开源项目:Three.js 构建 3D 世界的工具库
javascript·3d·开源
源代码•宸10 小时前
Leetcode—39. 组合总和【中等】
经验分享·算法·leetcode·golang·sort·slices