将 Golang JSON 存储到 Postgresql

我想将某个结构存储到我的数据库中,其中包含一个 JSON 字段。


type Comp struct {

    CompId               int64           `db:"comp_id" json:"comp_id"`

    StartDate            time.Time       `db:"start_date" json:"start_date"`

    EndDate              time.Time       `db:"end_date" json:"end_date"`

    WeeklySchedule       json.RawMessage `db:"weekly_schedule" json:"weekly_schedule"`

}

该表的架构是:


CREATE TABLE IF NOT EXISTS Tr.Comp(

    comp_id                 SERIAL,

    start_date              timestamp NOT NULL,

    end_date                timestamp NOT NULL,

    weekly_schedule         json NOT NULL,

    PRIMARY KEY (comp_id)

);

我在我的项目中使用 sqlx 和 lib/pq 驱动程序,以下将不会执行。相反,它恐慌地说有一个 nil 指针。DB 是一个全局*sqlx.DB结构


    tx := DB.MustBegin()


    compFixture := Comp{

        StartDate:            time.Now(),

        EndDate:              time.Now().AddDate(1, 0, 0),

        WeeklySchedule:       json.RawMessage([]byte("{}")),

    }

    _, err = tx.NamedExec(

        `INSERT INTO 

            Tr.Comp(comp_id, 

                start_date, end_date, weekly_schedule) 

            VALUES (DEFAULT, 

                :start_date, :end_date, :weekly_schedule)  

            RETURNING comp_id;`, compFixture)

    if err != nil {

        t.Fatal("Error creating fixture.", err)

    }

当我weekly_schedule从架构和夹具中删除时,一切正常。但是由于某种原因,当包含此字段时,程序会出现混乱。关于我应该如何weekly_schedule在我的数据库架构和 Go 结构中定义字段的任何想法?


慕妹3146593
浏览 329回答 3
3回答

萧十郎

从 go 文档:json.RawMessage is a raw encoded JSON object. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding.如果您在包 json json.RawMessage 中提供的示例中 log.Printf("%#", colors) 您可以看到在解组 json 对象 'Point'-member 后未解组而是保留 []byte 格式,直到color-format 是固定的,'Point' 被明确地解组。在将它放入数据库之前,您是否尝试过解组 WeeklySchedule 之类的东西?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go