golang中使用JSON

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的第二个参数,是一个对应类型变量的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值