在上一篇文章中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語言官方文檔