【基于GO的Web开发9】gin框架返回json

一、JSON 渲染介绍

在 Gin Web 开发中,前后端交互最常返回 JSON 格式数据,这个过程称为JSON 渲染 。 核心 API:c.JSON(http状态码, 返回的数据)

二、方法 1:map 方式返回 JSON

原生使用map[string]interface{}构造数据

Go 复制代码
package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	r.GET("/json", func(c *gin.Context) {
		//原生map构造json数据
		data := map[string]interface{}{
			"name":    "小王子",
			"message": "hello world!",
			"age":     18,
		}
		c.JSON(http.StatusOK, data)
	})

	r.Run(":9090")
}

gin.H 快捷写法(推荐)

gin.H本质就是map[string]interface{},省去手写 map 类型,代码更简洁

Go 复制代码
data := gin.H{
	"name":    "小王子",
	"message": "hello world!",
	"age":     18,
}
c.JSON(http.StatusOK, data)

三、方法 2:结构体方式返回 JSON

核心原理

结构体返回 JSON 本质是JSON 序列化,gin 利用反射读取结构体字段。

⚠️ 硬性规则:结构体字段名首字母必须大写,小写为私有字段,反射读取不到,JSON 不会输出该字段。

基础示例

Go 复制代码
package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

//定义结构体类型,type关键字
type Msg struct {
	Name    string
	Message string
	Age     int
}

func main() {
	r := gin.Default()

	r.GET("/another_json", func(c *gin.Context) {
		data := Msg{
			Name:    "小王子",
			Message: "Hello golang!",
			Age:     18,
		}
		c.JSON(http.StatusOK, data)
	})
	r.Run(":9090")
}

运行后返回结果键名大写:

复制代码
{"Name":"小王子","Message":"Hello golang!","Age":18}

结构体 Tag 标签定制 JSON 键名

如果想要返回小写 key ,给字段添加json标签,自定义输出名称。

Go 复制代码
type Msg struct {
	Name    string `json:"name"`
	Message string `json:"message"`
	Age     int    `json:"age"`
}

添加标签后返回结果:

复制代码
{"name":"小王子","message":"Hello golang!","age":18}

四、两种方式对比总结

  1. gin.H / map:适合数据少、结构灵活、字段不固定的场景
  2. 结构体:适合数据字段固定,项目大、规范严格的场景,代码可读性更高

五、高频易错点

  1. 结构体忘记使用type定义类型,错写成var msg struct{}
  2. 结构体字段首字母小写,JSON 返回缺失字段
  3. 忘记调用c.JSON(),路由没有返回任何响应

访问测试地址

Go 复制代码
http://127.0.0.1:9090/json
http://127.0.0.1:9090/another_json
相关推荐
修炼的dance9 小时前
白底图存JPG,sharp开mozjpeg背景杂点少近三成
前端
考虑考虑9 小时前
JDK26的JEP 500属性
java·后端·java ee
anOnion9 小时前
构建无障碍组件之Grid Pattern
前端·html·交互设计
乔旭伟10 小时前
Vben3 中后台表格封装实战:useVbenVxeGrid 的全局收敛与七个坑
前端·anti-design-vue·1024程序员节
鶴哥只手遮天10 小时前
jQuery 4.0 源码架构与工程实践-第 10 章 尺寸、几何与显隐
前端·javascript·jquery
Mia_墨黎10 小时前
2026 Windows 11 终端美化完全指南
前端·后端
foreverYoung10 小时前
给开源后台做等保适配,我发现了 5 个"看起来有、其实没用"的功能 从一个尴尬的现场测试说起
后端
程序猿阿越10 小时前
从 StatefulSet 到容器挂载:CSI 源码走读
后端·kubernetes·源码阅读
用户18806874935210 小时前
戴着 Rokid 接成语:用 AIUI 做一局有提示、有复盘的“接着说”
前端