返回顶部
首页 > 资讯 > 精选 >为什么 JSONB 以字符串形式返回?
  • 875
分享到

为什么 JSONB 以字符串形式返回?

2024-02-06 05:02:51 875人浏览 安东尼
摘要

问题内容 我已经启动了一个“instagram 克隆”后端来尝试学习有关 golang 的知识,但我遇到了一个不知道如何解决的问题。 我用 fiber 构建了一个简单的 api,可以获

问题内容

我已经启动了一个“instagram 克隆”后端来尝试学习有关 golang 的知识,但我遇到了一个不知道如何解决的问题。

我用 fiber 构建了一个简单的 api,可以获取一些帖子:

package server

import (
    "fmt"
    "instagram/internal/psql"
    queries "instagram/internal/sql"
    "net/Http"

    "GitHub.com/Gofiber/fiber/v2"
)

type like struct {
    username string
    name     string
    picture  string
}

type post struct {
    id          string `JSON:"id"`
    description string `json:"description"`
    media       string `json:"media"`
    type        string `json:"type"`
    likes       string `json:"likes"`
    user_id     string `json:"user_id"`
    created_at  string `json:"created_at"`
    updated_at  string `json:"updated_at"`
}

func listposts(c *fiber.ctx) error {
    rows, err := psql.db().query(queries.getallposts)

    if err != nil {
        c.sendstatus(400)
        return nil
    }

    defer rows.close()
    var data []post

    for rows.next() {
        var post post
        err := rows.scan(&post.id, &post.description, &post.media, &post.type, &post.created_at, &post.updated_at, &post.likes, &post.user_id)
        if err != nil {
            fmt.print(err)
            c.sendstatus(400)
            return nil
        }

        data = append(data, post)
    }

    return c.status(http.statusok).json(data)
}

问题是 likes 属性作为字符串返回:

[
    {
        "id": "...",
        "description": "...",
        "media": "...",
        "type": "...",
        "likes": "[]",
        "user_id": "...",
        "created_at": "...",
        "updated_at": "..."
    }
]

我尝试了一些东西,比如使用 json.marshal(data),我还写了 like 结构,但我无法使其工作,因为当我将 likes 的类型从 string 更改为 []like 时调用扫描时出现以下消息


sql: scan error on column index 6, name "likes": unsupported scan, storing driver.value type []uint8 into type *[]server.likesql: scan error on column index 6, name "likes": unsupported scan, storing driver.value type []uint8 into type *[]server.like

我正在使用 postgresql 数据库,并且我第一次尝试使用 jsonb 列,因此 likes数据库中是 jsonb 列。

我理想的有效负载是这样的:

[
    {
        "id": "...",
        "description": "...",
        "media": "...",
        "type": "...",
        "likes": [],
        "user_id": "...",
        "created_at": "...",
        "updated_at": "..."
    }
]

请注意,likes 现在是一个数组而不是字符串。那么有人知道如何解决这个问题吗?


正确答案


您很可能需要实现 sql.driver 的接口来“知道”如何扫描到您的结构,可能类似于

type Like struct {
    Username string
    Name     string
    picture  string
}

type Likes []Like

func (l Likes) Value() (driver.Value, error) {
    return json.Marshal(l)
}

// Make the Likes implement the sql.Scanner interface.
func (l *Likes) Scan(value interface{}) error {
    b, ok := value.([]byte)
    if !ok {
        return errors.New("type assertion to []byte failed")
    }

    return json.Unmarshal(b, &l)
}

以上就是为什么 JSONB 以字符串形式返回?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 为什么 JSONB 以字符串形式返回?

本文链接: https://lsjlt.com/news/561225.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 为什么 JSONB 以字符串形式返回?
    问题内容 我已经启动了一个“instagram 克隆”后端来尝试学习有关 golang 的知识,但我遇到了一个不知道如何解决的问题。 我用 fiber 构建了一个简单的 api,可以获...
    99+
    2024-02-06
  • CreateProcess和CreatePipe在VC ++中执行进程并以字符串形式返回输出
    以下是在VC ++中使用CreateProcess和CreatePipe执行进程并以字符串形式返回输出的示例代码:```cpp#in...
    99+
    2023-09-27
    C++
  • php count字符串返回的是什么
    本篇文章为大家展示了php count字符串返回的是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。php count字符串返回“1”。原因:count()是一个数组方法,可返回数组中元素的数目;...
    99+
    2023-06-29
  • PHP如何返回格式化的字符串
    这篇文章将为大家详细讲解有关PHP如何返回格式化的字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 格式化字符串 PHP 提供了多种方法来格式化字符串,以满足不同的需求和格式要求。以下是常用的格...
    99+
    2024-04-02
  • C++ 函数返回字符串时有哪些编码方式?
    函数返回字符串时有几种编码方式:字符串字面量:返回直接字符串,简单快速。标准字符串(std::string):使用 std::string 类,性能较好。动态分配字符串:动态分配字符数组...
    99+
    2024-04-19
    c++ 字符串编码
  • gRPC 方法可以返回包含字符串或 null 字段的消息吗?
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《gRPC 方法可以返回包含字符串或 null 字段的消息吗?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或...
    99+
    2024-04-05
  • php怎么将字符串转为小写形式(两种情况)
    PHP是一门以开发Web应用程序而著称的编程语言,它不仅拥有强大的功能,而且易于学习和使用。在进行字符串操作时,有时需要将字符串转换为小写字母形式。在本文中,我们将讨论如何使用PHP将字符串转换为小写形式。一、使用strtolower()函...
    99+
    2023-05-14
  • Python怎么将字符串转换为大写或小写形式
    Python中可以使用字符串的方法upper()和lower()来将字符串转换为大写和小写形式。 示例代码: string = &q...
    99+
    2024-03-02
    Python
  • 如果搜索字符串不在 FIELD() 函数中作为参数提供的字符串列表中,MySQL 将返回什么?
    假设如果搜索字符串不在FIELD()函数中作为参数提供的字符串列表中,那么MySQL将返回0作为输出。示例mysql> Select FIELD('Ram','New','Delhi')...
    99+
    2023-10-22
  • Python Sqlite3以字典形式返回查询结果的实现方法
    sqlite3本身并没有像pymysql一样原生提供字典形式的游标。 cursor = conn.cursor(pymysql.cursors.DictCursor) 但官方文档里已经有预留了相应...
    99+
    2022-06-04
    查询结果 字典 形式
  • php怎么将time()获取的值转为日期字符串形式
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将time()获取的值转为字符串形式php中,可使用date()函数将time()返回的值转为字符串形式。<php header("Content...
    99+
    2014-05-01
    php time() date()
  • 怎么在python中使用time.asctime()函数返回字符串
    怎么在python中使用time.asctime()函数返回字符串?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python有哪些常用库python常用的库:1.reque...
    99+
    2023-06-14
  • 怎么在python中使用f.read()方法返回字符串
    这篇文章将为大家详细讲解有关怎么在python中使用f.read()方法返回字符串,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python可以做什么Python是一种编程语言,内置了许多有...
    99+
    2023-06-14
  • 为什么 Python 中的 f-string 可以连接字符串与数字
    这篇文章主要讲解了“为什么 Python 中的 f-string 可以连接字符串与数字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么 Python 中的 f-string 可以连接字符...
    99+
    2023-06-15
  • vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)
    目录vue项目中字符串换行显示处理方法踩坑记录(记得抽空瞄一眼,很重要!) vue字符串换行问题及vue路由跳转传参总结vue项目中字符串换行显示 在vue项目中,请求后端...
    99+
    2023-05-17
    vue字符串 vue字符串换行 vue字符串换行显示
  • Python中怎么格式化数字为字符串
    在Python中,可以使用format()方法或者f-string来格式化数字为字符串。 使用format()方法: num =...
    99+
    2024-04-03
    Python
  • 为什么可以Python中使用f-string 连接字符串与数字
    本篇文章为大家展示了为什么可以Python中使用f-string 连接字符串与数字,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面以字符串和数字为例,看看强行操作会产生什么结果:>>&...
    99+
    2023-06-06
  • ajax回调函数返回的字符串乱码问题怎么解决
    本篇内容主要讲解“ajax回调函数返回的字符串乱码问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ajax回调函数返回的字符串乱码问题怎么解决”吧! ...
    99+
    2024-04-02
  • python中内置函数ord()返回字符串的ASCII数值是什么
    这篇文章主要介绍“python中内置函数ord()返回字符串的ASCII数值是什么”,在日常操作中,相信很多人在python中内置函数ord()返回字符串的ASCII数值是什么问题上存在疑惑,小编查阅了各式资料,整理出简...
    99+
    2023-07-02
  • php如何将time()获取的值转为日期字符串形式
    这篇文章主要介绍了php如何将time()获取的值转为日期字符串形式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何将time()获取的值转为日期字符串形式文章都会有所收获,下面我们一起来看看吧。在ph...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作