一、Unmarshal和Marshal方法

golang中使用json,经常会使用到两个函数Unmarshal和Marshal,前者用于将json数据反序列化为其他数据,后者用于将struct、map、slice序列化为json数据。

1、Unmarshal方法

1func Unmarshal(data []byte, v interface{}) error
2将json反序列化成struct对象
3将json 反序列化到map中
4将json反序列化到slice中

2、Marshal方法

1func Marshal(v interface{}) ([]byte, error)
2将struct对象序列化成json
3将map序列化成json
4将slice序列化成json

二、使用示例

 1package main
 2import (
 3       "fmt"
 4       "encoding/json"
 5)
 6type User struct {
 7        Username string
 8        Password string
 9        FriendName []string
10}
11func main() {
12         user:=User{}
13         user.Username="Tom"
14         user.Password="123456"
15         user.FriendName=[]string{"Li","Fei"}
16       //将struct转成json字符串,注意:结构体中的字段首字母必须大写,否则无法解析
17       if userJSON,err:=json.Marshal(user);err==nil{
18             fmt.Println(string(userJSON))   //打印结果:{"Username":"Tom","Password":"123456","FriendName":["Li","Fei"]}
19        }
20        //将slice转成json字符串
21        arr:=[]string{"Apple","Orange","Banana"}
22       if arrJSON,err:=json.Marshal(arr);err==nil{
23               fmt.Println(string(arrJSON))  //打印结果:["Apple","Orange","Banana"]
24        }
25        //将map转成json字符串
26         m:=map[string]string{"浙江":"杭州","湖南":"长沙"}
27         if mJSON,err:=json.Marshal(m);err==nil{
28                fmt.Println(string(mJSON))   //打印结果:{"浙江":"杭州","湖南":"长沙"} }
29         //json转成struct        jsonStr:=`{"Username":"Tom","Password":"123456","FriendName":["Li","Fei"]}`
30         var userJSON User
31         if err:=json.Unmarshal([]byte(jsonStr),&userJSON);err==nil{
32                   fmt.Println(userJSON)   //打印结果:{Tom 123456 [Li Fei]}
33         }
34         //json转成slice
35         jsonFruit:=`["Apple","Orange","Banana"]`
36         var arrFruit  []string
37         if err:=json.Unmarshal([]byte(jsonFruit),&arrFruit);err==nil{
38               fmt.Println(arrFruit)   //打印结果:[Apple Orange Banana]
39          }
40         //json转成map
41         jsonCity:=`{"浙江":"杭州","湖南":"长沙"}`
42         var mapCity map[string]string
43         if err:=json.Unmarshal([]byte(jsonCity),&mapCity);err==nil{
44                  fmt.Println(mapCity)  //打印结果: map[浙江:杭州 湖南:长沙]
45         }
46}

参考页面:gobyexample之json应用