首页前端开发其他前端知识GO语言的json解析如何使用encoding/json包

GO语言的json解析如何使用encoding/json包

时间2024-03-27 19:50:04发布访客分类其他前端知识浏览438
导读:这篇文章主要给大家介绍“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核实处理,我们将尽快回复您,谢谢合作!

JSON解析

若转载请注明出处: GO语言的json解析如何使用encoding/json包
本文地址: https://pptw.com/jishu/654440.html
java的源文件是由什么组成的? JS中创建数组的方式有什么,如何对数组排序

游客 回复需填写必要信息