1. 程式人生 > 實用技巧 >go json

go json

json 是一種輕量級的資料交換格式

json易於機器解析和生成,並有效的提升網路傳輸效率,通常程式在網路傳輸時會先將資料(j結構體,map)等序列化成json字串,到接收方得到json字串時,再反序列化恢復成原來的資料型別(結構體,map等 )

json資料線上解析

https://www.json.cn/網站可以驗證一個json格式的資料是否正確。尤其是我們編寫比較複雜的json格式資料,很有用。

package main

import (
    "encoding/json"
    "fmt"
)


//定義一個結構體
type Monster struct{
    Name string
Age int Birthday string Sal float64 Skill string } func testStruct(){ //演示 monster :=Monster{ Name :"小喬", Age :500, Birthday: "2020-11-11", Sal: 8000.0, Skill:"治癒微笑", } //將monster序列化 data,err :=json.Marshal(&monster) if err!=nil{ fmt.Printf(
"序列號錯誤,err=%v\n",err) } //輸出序列號後的結果 fmt.Printf("monster序列化後=%v\n",string(data)) } func testMap(){ //定義一個map var a map[string]interface{} //使用map,需要make a=make(map[string]interface{}) a["name"]="華晨宇" a["age"]=18 a["address"]="湖北十堰" //將a這個map進行序列化 //將monster序列化
data,err:=json.Marshal(a) if err!=nil{ fmt.Printf("序列化錯誤 err=%v\n",err) } //輸出序列化後的結果 fmt.Printf("a map 序列化後=%v\n",string(data)) } func testSlice(){ var slice []map[string]interface{} var ml map[string]interface{} //使用map前,需要先make ml=make(map[string]interface{}) ml["name"]="jack" ml["age"]="7" ml["address"]="北京" slice=append(slice,ml) var m2 map[string]interface{} //使用map前,需要先make m2=make(map[string]interface{}) m2["name"]="tom" m2["age"]="20" m2["address"]=[2]string{"黑龍江","杭州"} slice=append(slice,m2) //對切片進行操作 data,err :=json.Marshal(slice) if err!=nil{ fmt.Printf("序列化錯誤 err=%v\n",err) } //輸出序列化後的結果 fmt.Printf("slice 序列化後=%v\n",string(data)) } //對基本資料型別序列化,對基本資料型別進行序列化意義不大 func testFloat64(){ var numl float64 = 2345.66 //對numl進行序列化 data,err :=json.Marshal(numl) if err!=nil{ fmt.Printf("序列化錯誤 err=%v\n",err) } //輸出序列化後的結果 fmt.Printf("slice 序列化後=%v\n",string(data)) } func unmarshalStruct(){ str :="{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2020-11-11\",\"Sal\":8000,\"Skill\":\"牛魔王\"}" //定義一個Monster例項 var monster Monster err :=json.Unmarshal([]byte(str),&monster) if err!=nil{ fmt.Printf("unmarshal err=%v\n",err) } fmt.Printf("反序列化後monster=%v monster.Name=%v\n",monster,monster.Name) } func main(){ //演示將結構體,map,切片進行序列化 testStruct() testMap() testSlice()//對切片序列化 testFloat64()//對基本資料型別序列化 unmarshalStruct() }