go - 试图格式化 API 的响应,但我不知道如何
问题描述
您好开发人员我最近碰壁了,试图创建具有许多 2 多关系并属于关系的稍微高级的查询,我成功地使用 GORM 获取了它们,但是我想格式化对我赢得的结构的响应,我做不到这是我的查询我gorm
var p []modules.Posts
tm := modules.Tags{}
db.First(&tm , tagID)
//tag and posts has many 2 many rel
//post belongs to user
tagMaps := db.Model(&tm).Preload("TagMaps").Preload("User").Related(&p,"Posts")
我正在尝试格式化对此类内容的响应
[
{
"id": "post_id",
"title": "post_title",
"image" :" post_image",
"tags":[
{"name" : "tag_name" , "id" : "tag_id"},
{"name" : "tag_name" , "id" : "tag_id"},
{"name" : "tag_name" , "id" : "tag_id"}
],
"user":{
"id": "user_id",
"avatar": " user_avatar"
}
}
]
这就是gorm响应的样子,正确知道
{
"id": 2,
"title": "thos lore for other users lorem 2",
"image": "",
"User": {
"ID": 1,
"avatar": "url",
"user_name": "user 5",
"email": "newadmin@test.com",
"password": "password",
"status": "pea",
"google_id": "google",
"facebook_id": "face",
"account_type": "fb",
"CreatedAt": "2020-04-02T20:35:38+02:00",
"UpdatedAt": "2020-04-02T20:35:38+02:00",
"DeletedAt": null,
"Posts": null
},
"UserRefer": 1,
"created_at": "2020-04-02T20:36:05+02:00",
"updated_at": "2020-04-02T20:36:05+02:00",
"deleted_at": null,
"TagMaps": [{
"id": 1,
"tag_name": "asda",
"CreatedAt": "2020-04-15T23:25:05+02:00",
"UpdatedAt": "2020-04-17T21:39:26+02:00",
"DeletedAt": null,
"Posts": null
},
{
"id": 2,
"tag_name": "name",
"CreatedAt": "2020-04-15T23:25:05+02:00",
"UpdatedAt": "2020-04-17T21:39:26+02:00",
"DeletedAt": null,
"Posts": null
}
]
},
这是我目前的结构
type Posts struct {
ID uint `json: "id"`
Title string `json: "title"`
Image string `json: "image"`
User *User `gorm: "foreignkey:UserRefer"` // use UserRefer as foreign key
UserRefer uint
CreatedAt time.Time `json: "created_at"`
UpdatedAt time.Time `json: "updated_at"`
DeletedAt *time.Time `sql: "index" json: "deleted_at"`
TagMaps []Tags `gorm: "many2many:tag_maps;association_autoupdate:false;association_autocreate:false;"`
}
type Tags struct {
ID uint `gorm: "primary_key" json: "id"`
Name string `json: "tag_name"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql: "index"`
Posts []*Posts `gorm: "many2many:tag_maps"`
}
type User struct {
ID uint `gorm: "primary_key"`
Avatar string `json: "avatar" `
UserName string `json: "user_name"`
Password string `json: "password"`
Bio string `json: "bio"`
GoogleID string `json: "google_id"`
FacebookID string `json: "facebook_id"`
AccountType string `json: "account_type"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql: "index"`
// Relationship
Posts *Posts `gorm: "PRELOAD:false"`
}
任何建议都会被采纳,我的围棋水平不是很好,我一个月前就开始玩了
解决方案
不确定您要达到什么目标,但 GORM 响应与您需要的响应相差不远。
您可以尝试在结构中添加更多编码 json 标记吗,即:
- 忽略“CreatedAt”字段
CreatedAt time.Time `json:"-"`
- 将“用户”转换为“用户”(也适用于 TagMaps)
User *User `gorm: "foreignkey:UserRefer" json:"user"`
对了,还有json:",omitempty" 忽略空字段
推荐阅读
- ios - 操作系统错误:不允许操作,在 Flutter 应用程序中的 iOS 中创建文件夹时,errno = 1
- python - Python使用带有多线程的定时器来实现某些功能
- c# - C# 使用 AWS lambda 时,我可以确定函数中的析构函数会被执行吗?
- jenkins - 声明式管道中的并行运行
- excel - 将数据从excel(selenium basic)发送到网页上的日历
- python - 导入包时如何获取git hash
- java - 通过 setText 将文本设置为标签时,如何解决添加不需要的按钮和文本字段的问题?
- php - 如何在PHP中显示名字和姓氏的首字母
- swift - 多个可编码实现
- css - 线性渐变一般是如何完成的?css