GO语言的json解析如何使用encoding/json包
导读:这篇文章主要给大家介绍“GO语言的json解析如何使用encoding/json包”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“GO语言的json解析如何使用encodi...
这篇文章主要给大家介绍“GO语言的json解析如何使用encoding/json包”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“GO语言的json解析如何使用encoding/json包”文章能对大家有所帮助。在日常项目中,使用json格式进行数据封装是比较常见的操作,看一下golang怎么实现。
1、json序列化
将json字符串转为go语言结构体对象。
package main import ( "encoding/json" "errors" "fmt" ) var parsejsonerror = errors.new("json parse error") var tojsonerror = errors.new("to json error") type customjson struct { name string age int } //序列化为json func tojson(c *customjson) (string, error) { fmt.printf("原始结构体: %v\n", c) if jsonstr, err := json.marshal(c); err != nil { fmt.println("error =", err) return "", parsejsonerror } else { return string(jsonstr), nil } } func main() { w := customjson{ name: "李四", age: 30} result, _ := tojson(& w) fmt.println(result) }
执行结果
原始结构体: &
{
李四 30}
{
"name":"李四","age":30}
注意
结构体的字段首字母要大写。如果json字符串首字母都是小写怎么办?后面会说tag的使用。
2、json反序列化为结构体对象
将json字符串反序列化为结构体对象。
样例代码如下
package main import ( "encoding/json" "errors" "fmt" ) var parsejsonerror = errors.new("json parse error") var tojsonerror = errors.new("to json error") type customjson struct { name string age int } //反序列化为结构体对象 func parsejson(a string) (customjson, error) { fmt.printf("原始字符串: %s\n", a) var c customjson if err := json.unmarshal([]byte(a), & c); err != nil { fmt.println("error =", err) return c, parsejsonerror } return c, nil } func main() { j := `{ "name": "张三", "age": 19} ` if p, e := parsejson(j); e == nil { fmt.printf("转换对象为: %v\n", p) } }
执行结果
原始字符串: {
"name": "张三", "age": 19}
转换对象为: {
张三 19}
3、json反序列化为map类型
将json字符串反序列化为map类型
样例代码如下
package main import ( "encoding/json" "errors" "fmt" ) var parsejsonerror = errors.new("json parse error") var tojsonerror = errors.new("to json error") type customjson struct { name string age int } //反序列化为map func parsemap(a string) (map[string]interface{ } , error) { fmt.printf("原始字符串: %s\n", a) var m map[string]interface{ } if err := json.unmarshal([]byte(a), & m); err != nil { fmt.println("error =", err) return m, parsejsonerror } for k, v := range m { fmt.printf("k=%s,v类型为%t,v=%v\n", k, v, v) } return m, nil } func main() { j := `{ "name": "张三", "age": 19} ` if m, e := parsemap(j); e == nil { fmt.printf("转换map为: %v\n", m) } }
执行结果
原始字符串: {
"name": "张三", "age": 19}
k=name,v类型为string,v=张三
k=age,v类型为float64,v=19
转换map为: map[age:19 name:张三]
注意
虽然是int类型的,但是反序列化的时候如果不做转换,会默认为float64。
4、tag的使用
如果得到的json字符串每个key的首字母都是小写的,怎么转换为go的结构体对象呢?可以使用tag方式。
样例代码如下
package main import ( "encoding/json" "fmt" ) type testjson struct { name string `json:"name"` age int `json:"age"` } func main() { j := `{ "name": "张三", "age": 19} ` var c testjson if err := json.unmarshal([]byte(j), & c); err != nil { fmt.println("error =", err) } fmt.println("> > > > ", c) }
执行结果
> > > > { 张三 19}
注意
将原字符串的key作为tag打给结构体的字段,就可以实现字段转换了。
以上就是go语言实现json解析的方法详解的详细内容,更多关于go语言 json解析的资料请关注萬仟网其它相关文章!
感谢各位的阅读,以上就是“GO语言的json解析如何使用encoding/json包”的内容了,通过以上内容的阐述,相信大家对GO语言的json解析如何使用encoding/json包已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: GO语言的json解析如何使用encoding/json包
本文地址: https://pptw.com/jishu/654440.html