Postgres在Golang中嵌套JSON结果

编程入门 行业动态 更新时间:2024-10-27 00:26:08
本文介绍了Postgres在Golang中嵌套JSON结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用 gin 和 gorp

SQL:

SELECT p.project_id, p.name, COALESCE(NULLIF(json_agg(a.*)::TEXT, '[null]'), '[]')::JSON AS apps FROM project p LEFT JOIN app a USING (project_id) WHERE p.user_id=19 GROUP BY p.project_id, p.name ORDER BY project_id

结果:

Golang

type Project struct { ID int64 `db:"project_id, primarykey, autoincrement" json:"id"` UserID int64 `db:"user_id" json:"user_id"` Name string `db:"name" json:"name"` Status int `db:"status" json:"status"` UpdatedAt int64 `db:"updated_at" json:"updated_at"` CreatedAt int64 `db:"created_at" json:"created_at"` Apps json.RawMessage `json:"apps"` } func GetProjects(userID int64, page string) []Project { var projects []Project var err error _, err = db.GetDB().Select(&projects, "SELECT p.project_id, p.name, COALESCE(NULLIF(json_agg(a.*)::TEXT, '[null]'), '[]')::JSON AS apps FROM project p LEFT JOIN app a USING (project_id) WHERE p.user_id=$1 GROUP BY p.project_id, p.name ORDER BY project_id LIMIT 10 OFFSET $2", userID, page) fmt.Println("err", err) return projects }

并使用以下命令返回结果:c.JSON(200, gin.H{"data": projects})

And returning the results using: c.JSON(200, gin.H{"data": projects})

只有一个项目才有效

但是,如果有多个项目,则会出现以下错误:

But if there's more than one project it gives the below error:

错误:json: error calling MarshalJSON for type json.RawMessage: invalid character '"' after top-level value

有什么建议吗?

P.S:我是Golang的新手

P.S: I'm a newbie in Golang

推荐答案

,您可以使用此站点 json2struct. mervine/根据结果获得正确的结构.只需复制选择结果,并生成体面的结构

you can use this site json2struct.mervine/ to get right struct according to result. just copy select result, and generate your decent struct

或者您可以产生具有Project struct数组的新类型:

or you can produce new type which have Project struct array:

type Projects []Project

更多推荐

Postgres在Golang中嵌套JSON结果

本文发布于:2023-10-16 10:43:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1497341.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   Postgres   Golang   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!