为了账号安全,请及时绑定邮箱和手机立即绑定

将非结构化 JSON BYTEA 扫描到 map[string]string

将非结构化 JSON BYTEA 扫描到 map[string]string

Go
慕丝7291255 2022-05-18 16:26:55
这似乎是一个常见问题,可能已经在某个地方发布了,但我找不到任何讨论它的线程,所以这里是问题:我有一个存储类型列的 Postgres 表BYTEA。CREATE TABLE foo (  id         VARCHAR PRIMARY KEY,  json_data  BYTEA)该列json_data实际上只是 JSON 存储为BYTEA(我知道这并不理想)。它是非结构化的,但保证是string -> stringJSON。当我查询此表时,我需要将查询扫描SELECT * FROM foo WHERE id = $1到以下结构中:type JSONData map[string]stringtype Foo struct {  ID    string   `db:"id"`  Data  JSONData `db:"json_data"`}我正在使用sqlx的Get方法。当我执行查询时,我收到错误消息sql: Scan error on column index 1, name "json_data": unsupported Scan, storing driver.Value type []uint8 into type *foo.JSONData。显然,扫描器无法将 JSON 扫描BYTEA到地图中。我可以实现我自己的扫描仪并在列上调用我的自定义扫描仪json_data,但我想知道是否有更好的方法来做到这一点。我的JSONData类型可以实现现有接口来自动执行此操作吗?
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

正如@iLoveReflection 所建议的那样,在工作中实现Scanner接口*JSONData。这是实际的实现:


func (j *JSONData) Scan(src interface{}) error {

    b, ok := src.([]byte)

    if !ok {

        return errors.New("invalid data type")

    }


    return json.Unmarshal(b, j)

}


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号