在上一篇文章中https://blog.csdn.net/zhanghuaichao/article/details/103443937介绍了json,现在进行下实践,在go下进行序列化和反序列化,直接看下代码
package main
import (
"encoding/json"
"fmt"
)
//现在需要将一个json数据反序列化为一个数据结构
/*
{"cars":[{"company":"德国大众","name":"奥迪","price":"1600"},
{"company":"美国通用汽车","name":"雪弗兰","price":"1800"}]
}
要先定义一个这样的结构然后进行反序列化,我们测试的步骤是先定义一个数据结构,看看能否序列化
成我们想要的结构,验证下后再反序列话
*/
type car struct {
Company string `json:"company"`
Name string `json:"name"`
Price string `json:"price"`
}
type cars struct {
Cartest [2]car `json:"cars"`
}
func main() {
group := cars{
Cartest: [2]car{{"德国大众", "奥迪", "1600"}, {"美国通用汽车", "雪弗兰", "1800"}},
}
bb, errr := json.Marshal(group)
if errr != nil {
fmt.Println("error:", errr)
}
fmt.Println(string(bb))
//现在开始演示反序列化,
var strtest string="{\"cars\":[{\"company\":\"德国大众\",\"name\":\"奥迪\",\"price\":\"1600\"},{\"company\":\"美国通用汽车\",\"name\":\"雪弗兰\",\"price\":\"1800\"}]}"
fmt.Printf("%s\n",strtest)
var zhang []byte=[]byte(strtest)
var jiegou cars;
err1:=json.Unmarshal(zhang,&jiegou)
if err1 !=nil{
fmt.Println("unmarshal failed!!!")
return
}
fmt.Println(jiegou)
fmt.Printf("%s,%s,%s,%s,%s,%s",jiegou.Cartest[0].Name,jiegou.Cartest[0].Company,jiegou.Cartest[0].Price,jiegou.Cartest[1].Name,jiegou.Cartest[1].Company,jiegou.Cartest[1].Price)
}
代码的输出为
{"cars":[{"company":"德国大众","name":"奥迪","price":"1600"},{"company":"美国通用汽车","name":"雪弗兰","price":"1800"}]}
{"cars":[{"company":"德国大众","name":"奥迪","price":"1600"},{"company":"美国通用汽车","name":"雪弗兰","price":"1800"}]}
{[{德国大众 奥迪 1600} {美国通用汽车 雪弗兰 1800}]}
奥迪,德国大众,1600,雪弗兰,美国通用汽车,1800
里面的函数不具体解释了,大家想了解具体函数的作用参考 https://studygolang.com/pkgdoc go语言官方文档