golang中使用JSON

x33g5p2x  于2021-12-30 转载在 Go  
字(1.1k)|赞(0)|评价(0)|浏览(382)

golang标准库有一个名叫encoding/json的包,包含了JSON的序列化(Marshal)和反序列化(Unmarshal)的能力。

通过成员标签控制JSON输出

type Movie struct {
    Title  string
    Year   int  `json:"released"`
    Color  bool `json:"color,omitempty"`
    Actors []string
}

成员标签是一组有空格分开的键值对,格式为key:"value"。键json对应的值是输出JSON的文字或其它选项,omitempty的意思是,当这个成员是零值或空值时不输出。

JSON序列化

var movies = []Movie{
    {
        Title: "Casablanca", Year: 1942, Color: false,
        Actors: []string{"Humphrey Bogart", "Ingrid Bergman"},
    },
    {
        Title: "Cool Hand Luke", Year: 1967, Color: true,
        Actors: []string{"Paul Newman"},
    },
    {
        Title: "Bullitt", Year: 1968, Color: true,
        Actors: []string{"Steve McQueen", "Jacqueline Bisset"},
    },
}

// if data, err := json.Marshal(movies); err == nil {
data, err := json.MarshalIndent(movies, "", "  ")
if err == nil {
    jsonStr := string(data)
    fmt.Println(jsonStr)
} else {
    fmt.Println(err)
}

json.Marshal输出的结果是很紧凑的json,可以使用json.MarshalIndent进行格式化。

JSON反序列化

var moviesBack []Movie
if err := json.Unmarshal(data, &moviesBack); err != nil {
    fmt.Println(err)
} else {
    for _, movie := range moviesBack {
        fmt.Println(movie.Title)
    }
}

json.Unmarshal的第二个参数,是一个对应类型变量的指针。

相关文章