-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:47263
- shell命令
-
- 文章:(42)篇
- 阅读:156703
- Git教程
-
- 文章:(36)篇
- 阅读:237798
- leetCode刷题
-
- 文章:(76)篇
- 阅读:137254
-
go里面json包的使用2018-02-27 12:55 阅读(3837) 评论(0)
一、简介
go语言自动json转换包,在encoding/json中,如下图
使用json包,可以很方便将对象转为json,以及将json转为对象。
二、对象与json的相互转换
1、Marshal函数将对象转为json
通过使用Marshal函数,可以将对象转为json,Marshal函数定义如下:
func Marshal(v interface{}) ([]byte, error)
2、Unmarshal函数将json转为对象
通过使用Unmarshal函数,可以将对象转为json,Marshal函数定义如下:
func Unmarshal(data []byte, v interface{}) error
三、实例
1、结构体类型与json间的转换
a、将结构体转为json
type Student struct { Name string Age uint } s1 := Student{ "dequan", 18, } data, err := json.Marshal(s1) if err != nil { fmt.Println("转换失败") os.Exit(0) } fmt.Println(string(data))
注意事项:
①结构体里的字段首字母必须大写,否则无法正常解析;
②通过标签tag,可以改变json里面的key值,可以,如下:
type Student struct { Name string `json:"userName""` Age uint `json:"userAge"` } s1 := Student{ "dequan", 18, } data, err := json.Marshal(s1) if err != nil { fmt.Println("转换失败") os.Exit(0) } fmt.Println(string(data))
执行结果如下:
被标记为`json:"-"`的字段,将不会输出到json。
b、json转为结构体
type Student struct { Name string `json:"userName"` Age uint `json:"userAge"` } var data = []uint8(`{"userName":"dq","userAge":18}`) var s = Student{} err := json.Unmarshal(data, &s) if err != nil { fmt.Println(err) os.Exit(0) } fmt.Println(s)
输出结果如下:
注意事项:
①json中key要和字段的tag一致,若没有tag,则要和字段名一致,且大小写敏感。
②json中值的类型,需要和结构体中对应字段的值类型要保持一致。
2、映射类型与json间的转换
a、将映射类型转为json
var userInfo = make(map[string]string) userInfo["zhangsan"] = "number1" userInfo["wangwu"] = "number2" userInfo["xiaoming"] = "number3" jsonStr ,err := json.Marshal(userInfo) if (err != nil) { fmt.Println(err) } fmt.Println(string(jsonStr))
a、将json转为映射类型
var userInfo = make(map[string]string) var jsonStr = []uint8(`{"userName":"dq","userAge":"18"}`) err := json.Unmarshal(jsonStr, &userInfo) if (err != nil) { fmt.Println(err) } fmt.Println(userInfo)
注意事项:
①json中值的类型,需要和映射中对应key的值类型要保持一致。