[英]golang querying database using Gorm and returning json in http response
我是Go的新手,正在使用Gorm查詢我的postgres數據庫,但是在以字典格式返回數據時遇到了麻煩,其中,神奇寶貝的類型用作所有該類型神奇寶貝的數組的鍵
json:無法將對象解組為[] models.Pokemon類型的Go值
這是我的代碼:
type Pokemon struct {
Name string `db:"name"`
Type string `db:"type"`
}
pokemonTypes := [6]string{
"fire",
"electric",
"water",
"grass",
}
var retData struct {
Poke []Pokemon
}
m := make(map[string][]Pokemon)
for _, t := range pokemonTypes {
pokemon := DB.Where(&Pokemon{Type: t}).Find(&retData.Poke)
p, _ := json.Marshal(pokemon)
err = json.Unmarshal(p, &retData.Poke) // getting error here
if err != nil {
fmt.Println(err)
}
m[category] = retData.Poke
}
data, _ := json.Marshal(m)
w.Write(data) // http repsonse
我的數據庫中有這個
name | type
----------------------
pikachu | electric
charmander | fire
blaziken | fire
venusaur | grass
treeko | grass
squirtle | water
我想以這種json格式返回數據
{
“electric”: [
{"name": "pikachu", "type": "electric"},
],
"fire": [
{"name": "charmander", "type": "fire"},
{"name": "blaziken", "type": "fire"}
],
"grass": [
{"name": "venusaur", "type": "grass"},
{"name": "treeko", "type": "grass"},
],
"water": [
{"name": "squirtle", "type": "water"},
]
}
DB.Where(&Pokemon{Type: t}).Find(&retData.Poke)
返回*db
指針,您可以使用該指針來鏈接其他方法。 當您執行.Find(&retData.Poke)
時,您已經將Postgre行反序列化到結構切片中。 因此, pokemon
實際上並不是您想的那樣。
現在剩下的唯一事情是將.Find()
與.Error()
以便您可以返回並檢查查詢中的任何錯誤。 像這樣 :
for _, t := range pokemonTypes {
err := DB.Where(&Pokemon{Type: t}).Find(&retData.Poke).Error()
if err != nil {
fmt.Println(err)
return
}
p, _ := json.Marshal(retData.Poke)
err = json.Unmarshal(p, &retData.Poke)
if err != nil {
fmt.Println(err)
return
}
m[category] = retData.Poke
}
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.