在Beego中实现JSON接口需调用this.ServeJSON(false)禁用模板、设置头,再赋值this.Data["json"]为map或导出字段结构体,最后以this.ServeJSON()触发序列化输出。

在Beego框架中快速实现一个返回标准JSON格式数据的接口,需要正确设置控制器方法的返回类型、禁用模板渲染、手动设置Content-Type头,并调用json.Marshal后写入响应体。
定义控制器方法并禁用模板渲染
在controllers目录下新建一个控制器文件(如api_controller.go),定义结构体继承beego.Controller,并在对应方法顶部调用this.ServeJSON(false)——这会自动禁用模板解析、设置Content-Type: application/json,并触发后续this.Data["json"]的序列化输出。
不调用ServeJSON或设为true会导致Beego尝试渲染HTML模板,返回空响应或500错误。
构造返回数据并赋值给Data["json"]
方法一:直接赋值map或struct
在方法体内创建Go原生map或已定义的struct实例,例如data := map[string]interface{}{"code": 0, "msg": "success", "data": nil},然后执行this.Data["json"] = data。这一步必须在ServeJSON调用之后、this.ServeJSON()之前完成。
方法二:使用自定义结构体提升类型安全
先定义结构体:type Resp struct { Code int `json:"code"` Msg string `json:"msg"` Data interface{} `json:"data"` },再实例化赋值:this.Data["json"] = Resp{Code: 0, Msg: "ok", Data: []string{"a", "b"}}。字段必须导出(首字母大写)且加json标签,否则序列化为空对象。
触发JSON响应输出
在赋值完成后,立即调用this.ServeJSON()。该方法会调用json.Marshal序列化this.Data["json"]内容,写入ResponseWriter,并结束请求处理流程。
【必须确保this.ServeJSON()是该方法的最后一行可执行语句】。如果后面还有逻辑(如日志打印、数据库操作),会被跳过且不报错,极易造成调试困惑。


















