json编解码介绍
{
“name“:“矮大紧“,
“sex“:“man“,
“age“:131,
“gir1s“:[“金莲“,“凤姐“,“码蓉“,“春哥“],
“成绩“:2,14,9,78,96],
“家电“:“彩电“:“海尔“,“洗衣机“:“三星“},
“stars“:[
{“name“:“Faye“,“address“:“北京“},
{“name“:“andy“,“address“:“香港“},
{“address“:“台湾“,“name“:“eddie“}
]
}
记住,json语法要求最后一个元素后面,不能叫逗号
json编解码
在网络中传输的时候,把student结构体,编码成json字符串,传输 ==> 结构体 ==> 字符串 ==>编码
在接收字符串,需要将字符串转换成结构体,然后操作 > 字符串 == > 结构体>解码
demo
package main
import (
"encoding/json"
"fmt"
)
type Student struct{
Name string
Age int
Id int
gender string //注意gender是小写的,小写字母开头的在json编码的时候回忽略掉
}
func main () {
//在网络中传输的时候,把student结构体,编码成json字符串,传输 ==> 结构体 ==> 字符串 ==>编码
//在接收字符串,需要将字符串转换成结构体,然后操作 ==> 字符串 == > 结构体==>解码
lily := Student{
Id: 1,
Name: "Lily",
Age: 20,
gender: "女士",
}
//编码(序列化), 结构=》 字符串
//func Marshal(v interface{}) ([]byte, error)
encodeInfo, err := json.Marshal(&lily)
if err != nil {
fmt.Println("json.Mashal err:", err)
return
}
fmt.Println("encondeInfo:", string(encodeInfo))
//对端接收到数据
//反序列化(解码):字符串=》结构体
var lily2 Student//创建一个空对象
//func Unmarshal(data []byte, v interface{}) error
if err := json.Unmarshal([]byte(encodeInfo),&lily2 ); err != nil {
fmt.Println("json.Unmarshal err:", err)
return
}
fmt.Println("name:", lily2.Name)
fmt.Println("id:", lily2.Id)
fmt.Println("age:", lily2.Age)
fmt.Println("gender:", lily2.gender)
}
结果
tianyi@SPACE-STATION day3 % go run json.go
encondeInfo: {"Name":"Lily","Age":20,"Id":1,"Gender":"女士"}
name: Lily
id: 1
age: 20
gender: 女士