JSON:
JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和生成,并有效的 提升网络传输效率。 Json易于机器解析和生成,并有效的提升网络传输效率,通常程序传输时会先将数据序列化成json字符串,接收方再反序列化成原数据类型 所有的数据类型都可以通过Json表示 Json.cn这个网站可以验证Json格式 序列化用json.Marshal()
反序列化用json.Unmarshal()
,反序列化时要和序列化前的数据类型保持一致
创建格式:
基本数据类型序列化:
func testBasic ( ) { num := 1.111 marshal, err := json. Marshal ( num) if err != nil { fmt. Println ( "json.Marshal err:" , err) } fmt. Println ( "序列化后:" , string ( marshal) )
}
结构体序列化:
func main ( ) { testStudent ( )
}
type Student struct { Name string `json:"student_name"` Age int `json:"student_age"` Birthday string `json:"student_birthday"` Address string `json:"student_address"`
} func testStudent ( ) { student := Student{ Name: "itzhuzhu" , Age: 24 , Birthday: "1998-01-01" , Address: "广州市天河区" , } marshal, err := json. Marshal ( & student) if err != nil { fmt. Println ( "json.Marshal err:" , err) } fmt. Println ( "序列化后:" , string ( marshal) )
}
map序列化:
func testMap ( ) { var m map [ string ] interface { } m = make ( map [ string ] interface { } ) m[ "name" ] = "韩信" m[ "age" ] = 23 m[ "address" ] = "广州" marshal, err := json. Marshal ( m) if err != nil { fmt. Println ( "json.Marshal err:" , err) } fmt. Println ( "序列化后:" , string ( marshal) )
}
切片序列化:
func testSlice ( ) { var slice [ ] map [ string ] interface { } var m map [ string ] interface { } m = make ( map [ string ] interface { } ) m[ "name" ] = "韩信" m[ "age" ] = 23 m[ "address" ] = "广州" slice = append ( slice, m) marshal, err := json. Marshal ( m) if err != nil { fmt. Println ( "json.Marshal err:" , err) } fmt. Println ( "序列化后:" , string ( marshal) )
}
反序列化为结构体:
func deserialize ( ) { str := "{\"Name\":\"itzhuzhu\",\"Age\":24,\"Birthday\":\"1998-01-01\",\"Address\":\"广州市天河区\"}" var student Studenterr := json. Unmarshal ( [ ] byte ( str) , & student) if err != nil { fmt. Println ( "json.Unmarshal err:" , err) } fmt. Println ( "反序列化后:" , student)
}
反序列化为map:
func deserializeMap ( ) { str := " {\"address\":\"广州\",\"age\":23,\"name\":\"韩信\"}" var m map [ string ] interface { } err := json. Unmarshal ( [ ] byte ( str) , & m) if err != nil { fmt. Println ( "json.Unmarshal err:" , err) } fmt. Println ( "反序列化后:" , m)
}
反序列化为切片:
func deserializeSlice ( ) { str := " [{\"address\":\"广州\",\"age\":23,\"name\":\"韩信\"}]" var slice [ ] map [ string ] interface { } err := json. Unmarshal ( [ ] byte ( str) , & slice) if err != nil { fmt. Println ( "json.Unmarshal err:" , err) } fmt. Println ( "反序列化后:" , slice)
}