我正在尝试将json类型的postgres列转换为golang json对象。
type MY_JSON struct {
MY_ID string `json:"my_id"`
MY_INFO []MY_INNER_JSON `json:"my_info"`
}
type MY_INNER_JSON struct {
SOME_ID string `json:"some_id"`
SOME_NUM int64 `json:"some_num"`
SOME_OPTIONAL string `json:"some_optional,omitempty"`
}
rows, err := db.Query("SELECT my_json FROM my_json_table LIMIT 1;")
for rows.Next() {
var mycolumn MY_JSON
err = rows.Scan(&mycolumn)
fmt.Println(mycolumn)
}
这是json的样子
{
"my_id": "this is my_id",
"my_info": [
{
"some_id": "some_id",
"some_num": 123
},
{
"some_id": "some_id",
"some_num": 123,
"some_optional": "sometimes more"
},
]
}
在运行时我因golang感到恐慌。
有人可以指出我的方向并告诉我我在哪里做错了吗?
答案 0 :(得分:2)
通过在MY_JSON
上实现sql.Scanner
接口,您的代码应该可以正常工作。为此,您只需要在Scan
类型上添加MY_JSON
方法(使用指针接收器)即可。
func (m *MY_JSON) Scan(src interface{}) error {
bs, ok := src.([]byte)
if !ok {
return errors.New("not a []byte")
}
return json.Unmarshal(bs, m)
}