我有这个结构:
type Movies struct {
ID string
Title string
Actors []struct {
Name string
City string
State string
Country string
}
}
然后我就有了 sql 查询和逻辑:
query := `select m.id as id, m.title as title, m.actors as actors from Movies where id = $1`
rows, err := db.Query(query, movieID)
var rowsOut []types.Movies
for rows.Next() {
var movies types.Movies
var actors_json string
scanerr := rows.Scan(
&movies.id,
&movies.title,
&movies.actors_json
)
}
因此,当我打印出
fmt.Println(actors_json)
时,它会按照我想要的方式打印出来,实际上与它存储在数据库中的方式完全相同:
{"actors": [{"name": "x", "city": "Miami", "state": "FL", "country": "US"}]}
但是当我继续解组它并将其添加到结构中时:
err := json.Unmarshal([]byte(actors_json), &movies)
if err != nil {
fmt.Println("Error unmarshaling JSON:", err)
} else {
fmt.Println("Unmarshalled TSD:", movies.Actors)
}
if scanerr != nil {
return rowsOut, err
}
这个
fmt.Println("Unmarshalled TSD:", movies.Actors)
打印 []
,就像它是空的?
为什么会发生这种情况?有人可以解释一下吗?我已经被困了一段时间了,所以提前谢谢你。
您需要添加JSON标签:
type Movies struct {
ID string `json:"id"`
Title string `json:"title"`
Actors []struct {
Name string `json:"name"`
City string `json:"city"`
State string `json:"state"`
Country string `json:"country"`
} `json:"actors"`
}
if err := json.Unmarshal([]byte(actors_json), &movies.Actors); err != nil {
return err
}