这似乎是一个常见问题,可能已经发布在某个地方,但是我找不到任何讨论此问题的线程,所以这里是问题所在:
我有一个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"`
}
我正在使用sqlx的Get
方法。执行查询时,出现错误消息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
类型可以实现一个现有接口来自动执行此操作吗?
如@iLoveReflection所建议,在JSONData
上实现Scanner接口是可行的。这是实际的实现:
*JSONData