JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
Go与Json
- 导入包:Import “encoding/json”
- 序列化: json.Marshal(data interface{})
- 反序列化: json.UnMarshal(data []byte, v interface{})
序列化例子
package main
import(
"fmt"
"encoding/json"
)
type User struct{
UserName string `json:"userName"`
NickName string `json:"nickName"`
Age int `json:"age"`
Birthday string
Sex string
Email string
Phone string
}
// 测试根据Json协议打包自定的结构体
func testJson() {
// 自定结构
user :=&User{
UserName:"马化腾",
NickName:"老马",
Age:43,
Birthday:"2008/8/8",
Sex:"男",
Email:"马化腾@qq.com",
Phone:"110",
}
// 打包
data,err := json.Marshal(user)
if err !=nil{
fmt.Println("Json.Marshal failed,err:",err)
return
}
fmt.Printf("%s\n",data)
}
// 测试根据Json协议打包Int
func testJsonInt() {
var age = 100
// 打包
data,err := json.Marshal(age)
if err !=nil{
fmt.Println("Json.Marshal failed,err:",err)
return
}
fmt.Printf("%s\n",data)
}
// 测试根据Json协议打包Map
func testJsonMap() {
var m map[string]interface{}
m = make(map[string]interface{})
m["userName"] = "user1"
m["age"] = 18
m["sex"] = "man"
data,err := json.Marshal(m)
if err !=nil{
fmt.Println("Json.Marshal failed,err:",err)
return
}
fmt.Printf("%s\n",data)
}
// 测试根据Json协议打包Slice
func testJsonSlice() {
var m map[string]interface{}
m = make(map[string]interface{})
m["userName"] = "user1"
m["age"] = 18
m["sex"] = "man"
var s []map[string]interface{}
s = append(s,m)
m["userName"] = "user2"
m["age"] = 20
m["sex"] = "woman"
s = append(s,m)
data,err := json.Marshal(s)
if err !=nil{
fmt.Println("Json.Marshal failed,err:",err)
return
}
fmt.Printf("%s\n",data)
}
func main() {
// testJson()
// testJsonInt()
// testJsonMap()
// testJsonSlice()
}
- 输出的结果可以复制到json官网翻译
反序列化例子
- json.Unmarshal([]byte(data), &user1)
package main
import(
"fmt"
"encoding/json"
)
type User struct{
UserName string `json:"userName"`
NickName string `json:"nickName"`
Age int `json:"age"`
Birthday string
Sex string
Email string
Phone string
}
// 测试根据Json协议打包自定的结构体
func testJson()(ret string, err error) {
// 自定结构
user :=&User{
UserName:"马化腾",
NickName:"老马",
Age:43,
Birthday:"2008/8/8",
Sex:"男",
Email:"马化腾@qq.com",
Phone:"110",
}
// 打包
data,err := json.Marshal(user)
if err !=nil{
fmt.Println("Json.Marshal failed,err:",err)
return
}
fmt.Printf("%s\n",data)
ret = string(data)
return
}
// 测试根据Json协议反序列化自定义结构
func testUnJsonStruct() {
data, err := testJson()
if err != nil {
fmt.Println("test struct failed, ", err)
return
}
// 核心
var user1 User
err = json.Unmarshal([]byte(data), &user1)
if err != nil {
fmt.Println("Unmarshal failed, ", err)
return
}
fmt.Println(user1)
}
func main() {
testUnJsonStruct()
}