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"
}
相关推荐
lzhdim18 分钟前
13、JavaScript事件循环机制 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
liangshanbo121525 分钟前
Vue 3 <script setup> 的本质原理是什么?它与普通 setup()有何区别?
前端·javascript·vue.js
程序员小八7772 小时前
Go 语言特性
开发语言·后端·golang
七牛开发者2 小时前
实测推荐 3 个 Skill,轻松上手 Codex 网页设计与交付流程
前端·javascript·后端
七牛开发者2 小时前
拆解 dsh 系列:从源码和版本变化看 DeepSeek Harness 的设计取舍
前端·javascript·后端
谭光志3 小时前
如何从网站提取设计风格:DOM、计算样式与 DESIGN.md
前端·javascript·agent
柒和远方3 小时前
V079: Milvus 向量数据库:AI 日记本的三组件部署、集合字段建模与余弦索引
javascript·sql
水獭比特3 小时前
Anthropic Files / Skills 迁移:Workspace 不是租户隔离,API Key 也不是用户身份
javascript
默_笙4 小时前
☕ 我给 TS 类型做了台"瘦身手术",还顺手用 Docker 起了个 MySQL
前端·javascript
XLYcmy4 小时前
PDF论文处理器 - 完整使用指南
pdf·llm·json·agent·token·csv·dify