gpt4 book ai didi

go - 使用 Pop 将数据库中的 JSON 字段编码为结构

转载 作者:行者123 更新时间:2023-12-03 03:11:34 25 4
gpt4 key购买 nike

我正在使用 Go Buffalo 的 ORM Pop,并且希望将 JSON 存储在字段中并能够将其编码到结构中。

例如

架构.sql

CREATE TABLE tree (
id uuid PRIMARY KEY,
name text NOT NULL,
fruit json,
);

main.go

type Tree struct {
ID uuid.UUID `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Fruit []Fruit `json:"fruit" db:"fruit"`
}

type Fruit struct {
ID int `json:"id"`
Name string `json:"name"`
}

我收到以下错误:

sql: converting argument $25 type: unsupported type []Fruit, a slice of struct
<小时/>

更新

根据反馈添加了以下方法:


type Fruits []Fruit

// Value implements the driver.Valuer interface
func (f Fruits) Value() (driver.Value, error) {
return json.Marshal(of)
}

// Scan implements the sql.Scanner interface
func (f * Fruits) Scan(value interface{}) error {
var data []byte
if b, ok := value.([]byte); !ok {
data = b
return errors.New("type assertion to []byte for Fruit failed")
}
return json.Unmarshal(data, &of)
}

现在收到错误:

Cannot fetch from database: unable to fetch records: sql: Scan error on column index 26, name "fruit": unexpected end of JSON input
<小时/>

更新2

将扫描方法更新为以下内容并修复了错误:

// Scan implements the sql.Scanner interface
func (f * Fruits) Scan(value interface{}) error {
var data = []byte(value.([]uint8))
return json.Unmarshal(data, &of)
}

最佳答案

基于@mkopriva提供的帮助

您需要为您的结构提供 Value 和 Scan 方法

// Tree tall tree with many fruit
type Tree struct {
ID uuid.UUID `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Fruit []Fruit `json:"fruit" db:"fruit"`
}

// Fruit fruit found on a tree
type Fruit struct {
ID int `json:"id"`
Name string `json:"name"`
}

// Creates a splice of Fruit
type Fruits []Fruit

// Value implements the driver.Valuer interface
func (f Fruits) Value() (driver.Value, error) {
return json.Marshal(of)
}

// Scan implements the sql.Scanner interface
func (f * Fruits) Scan(value interface{}) error {
var data = []byte(value.([]uint8))
return json.Unmarshal(data, &f)
}

关于go - 使用 Pop 将数据库中的 JSON 字段编码为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59301807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com