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

问题描述 投票:0回答:1

这似乎是一个常见问题,可能已经发布在某个地方,但是我找不到任何讨论此问题的线程,所以这里是问题所在:

我有一个Postgres表,存储着BYTEA类型的列。

CREATE TABLE foo (
  id         VARCHAR PRIMARY KEY,
  json_data  BYTEA
)

json_data列实际上只是存储为BYTEA的JSON(我知道这并不理想)。它是非结构化的,但保证为string -> string JSON。

查询此表时,需要将查询SELECT * FROM foo WHERE id = $1扫描到以下结构中:

type JSONData map[string]string

type Foo struct {
  ID    string   `db:"id"`
  Data  JSONData `db:"json_data"`
}

我正在使用sqlxGet方法。执行查询时,出现错误消息Get

[显然,扫描仪在将JSON sql: Scan error on column index 1, name "json_data": unsupported Scan, storing driver.Value type []uint8 into type *foo.JSONData扫描到地图中时遇到问题。我可以实现自己的扫描仪,并在BYTEA列上调用自定义扫描仪,但是我想知道是否有更好的方法可以做到这一点。我的json_data类型可以实现一个现有接口来自动执行此操作吗?

sql json go
1个回答
0
投票

如@iLoveReflection所建议,在JSONData上实现Scanner接口是可行的。这是实际的实现:

*JSONData
© www.soinside.com 2019 - 2024. All rights reserved.