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
