1.说明
在go中,使用json.Marshal()函数可以对一组数据进行JSON格式的编码
将一个对象编码成JSON数据
func Marshal(v interface{}) ([]byte, error)
将JSON数据解码
func Unmarshal(data []byte, v interface{}) error
2. 直接使用
(1).将对象转换成json
type Person struct {
Name string
Age int
}
func main() {
person := Person{
Name: "yw",
Age: 11,
}
//将对象转换成json
pjson, err := json.Marshal(person)
if err != nil {
log.Panic(err)
}
fmt.Printf("json:%v",string(pjson))
}
(2). 将json转换成对象
func main() {
var pjson = []byte(`[
{"Name": "yw", "Age": 12},
{"Name": "zk", "Age": 13}
]`)
var persionList []Person
//将json转换成结构体
err := json.Unmarshal(pjson, &persionList)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", persionList)
}
(3).将嵌套json转化成结构体
var pjson = []byte(`{"Name": "yw","Age": 12,
"Children":[{"Name":"大旺","Sex":"男"},{"Name":"小旺","Sex":"女"}]}`)
var persion map[string]interface{}
//var persion interface{}
//将json转换成结构体
err := json.Unmarshal(pjson, &persion)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v \n", persion)
3. 使用Encode和Decode操作json
(1).使用Decode
http.HandleFunc("/decode", func(w http.ResponseWriter, r *http.Request) {
var person Person
json.NewDecoder(r.Body).Decode(&person)
fmt.Printf("%+v \n", person)
})
http.ListenAndServe(":8080", nil)
(2).使用Encode
http.HandleFunc("/encode", func(w http.ResponseWriter, r *http.Request) {
per := Person{
Name: "ywx",
Age: 25,
}
json.NewEncoder(w).Encode(per)
})
http.ListenAndServe(":8080", nil)