2 回答

TA貢獻1810條經(jīng)驗 獲得超5個贊
您可以使用此站點http://json2struct.mervine.net/根據(jù)結(jié)果獲得正確的結(jié)構(gòu)。只需復(fù)制選擇結(jié)果,并生成您體面的結(jié)構(gòu)
或者您可以生成具有項目結(jié)構(gòu)數(shù)組的新類型:
type Projects []Project

TA貢獻1998條經(jīng)驗 獲得超6個贊
我從這個答案中使用下面的這個解決方案使它工作
我不知道這是一個多么干凈的解決方案,但我最終制作了自己的數(shù)據(jù)類型JSONRaw。DB 驅(qū)動程序?qū)⑵湟暈?a,[]btye但json.RawMessage在 Go 代碼中仍可將其視為 a 。
這是一個復(fù)制粘貼重新實現(xiàn)MarshalJSON,并UnmarshalJSON從編碼/ JSON庫。
//JSONRaw ...
type JSONRaw json.RawMessage
//Value ...
func (j JSONRaw) Value() (driver.Value, error) {
byteArr := []byte(j)
return driver.Value(byteArr), nil
}
//Scan ...
func (j *JSONRaw) Scan(src interface{}) error {
asBytes, ok := src.([]byte)
if !ok {
return error(errors.New("Scan source was not []bytes"))
}
err := json.Unmarshal(asBytes, &j)
if err != nil {
return error(errors.New("Scan could not unmarshal to []string"))
}
return nil
}
//MarshalJSON ...
func (j *JSONRaw) MarshalJSON() ([]byte, error) {
return *j, nil
}
//UnmarshalJSON ...
func (j *JSONRaw) UnmarshalJSON(data []byte) error {
if j == nil {
return errors.New("json.RawMessage: UnmarshalJSON on nil pointer")
}
*j = append((*j)[0:0], data...)
return nil
}
//Project ....
type Project struct {
ID int64 `db:"project_id, primarykey, autoincrement" json:"id"`
UserID int64 `db:"user_id" json:"user_id"`
Name string `db:"name" json:"name"`
Status int `db:"status" json:"status"`
UpdatedAt int64 `db:"updated_at" json:"updated_at"`
CreatedAt int64 `db:"created_at" json:"created_at"`
Apps JSONRaw `json:"apps"`
}
但我想知道除此之外是否還有干凈的方法?
希望這也能幫助其他人。
- 2 回答
- 0 關(guān)注
- 268 瀏覽
添加回答
舉報