将值解组到 struct golang

问题描述 投票:0回答:1

我有这个结构:

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)
打印
[]
,就像它是空的?

为什么会发生这种情况?有人可以解释一下吗?我已经被困了一段时间了,所以提前谢谢你。

go struct unmarshalling
1个回答
0
投票

您需要添加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
}
© www.soinside.com 2019 - 2024. All rights reserved.