JSON(javascript object notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。key-val
JSON是在2001年开始推广的数据格式,目前已成为主流的数据格式。
JSON易于机器解析和生成,并有效地提升网络传输效率。通常程序在网络传输时会先将数据(结构体、map)等序列化成json字符串,到接收方得到json数据时,再反序列化恢复成原来的数据类型。这种方式已成为各个语言的标准。
要解析成json格式,struct里面的字段必须大写!!!不然解析出来的是{}
因为Json包相当于一个外包,字段大写才能被其调用。。。
package mainimport (
"encoding/json"
"fmt"
)type monster struct {
Name string
Age int
Birthday string
Sal float64
Skill string
}func testStruct() {
m := monster{
Name: "牛魔王",
Age: ,
Birthday: "1994-09-18",
Sal: 10000.0,
Skill: "牛魔拳",
}
//序列化
data, err := json.Marshal(&m)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
}func testMap() {
var a map[string]interface{}
a = make(map[string]interface{})
a["name"] = "孙悟空"
a["age"] =
a["address"] = "水帘洞"
a["skill"] = "七十二变"
data, err := json.Marshal(a)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
}func testSlice() {
var slice []map[string]interface{}
var m1 map[string]interface{} m1 = make(map[string]interface{})
m1["name"] = "孙悟空"
m1["age"] =
m1["address"] = "水帘洞"
m1["skill"] = []string{"七十二变", "如意金箍棒"}
slice = append(slice, m1)
var m2 map[string]interface{} m2 = make(map[string]interface{})
m2["name"] = "猪八戒"
m2["age"] =
slice = append(slice, m2)
data, err := json.Marshal(slice)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
}func testFloat64() {
var a float64
a = 0.987
data, err := json.Marshal(a)
if err != nil {
fmt.Println("序列化失败,error=", err)
}
fmt.Printf("序列化之后的结果:%v\n", string(data))
}func main() {
testStruct()
testMap()
testSlice()
testFloat64()
}
要想序列化成小写的,只需要用tag指定即可:
对普通数据类型进行序列化是没意义的,只是相当于转换成string类型。