• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Golang 如何解析和生成json
    POST TIME:2021-10-18 17:23

    JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的內建快速解析支持,使得其更适用于网络数据传输领域。

    Golang自带的JSON解析库encoding/json,可以用起将结构化数据序列化成json字符串或从json字符串中解析出我们想要的数据。

    1.解析json

    给一个较为复杂的json字符串,包含数组,数组的元素是json对象。我们需要取出数组第一个元素中的某一个字段值。其它的解析均可参考下面的代码。

    package main
    
    import (
      "encoding/json"
      "fmt"
    )
    
    func main() {
        jsonStr := []byte(`{"uin":1589276509,"feedID":10000,"videos":[{"picture":"http://qqpublic.qpic.cn/avatar.jpg","duration":"839"}]}`)
        var jsonMap map[string]interface{}
        if err := json.Unmarshal(jsonStr, jsonMap); err!=nil {
          fmt.Printf("json decode failed, err=%v", err)
          return
        }
        value, ok:=jsonMap["videos"]
        fmt.Printf("value=%#v\n", value)
        if ok {
            sliceValue, ok := value.([]interface{})
            if ok {
                mapValue, ok := sliceValue[0].(map[string]interface{})
                if ok {
                    duration, ok := mapValue["duration"]
                    if ok {
                        fmt.Printf("d=%v,type=%T\n",duration,duration)
                    }
                }
            }
        }
    }

    程序输出:

    value=[]interface {}{map[string]interface {}{"picture":"http://qqpublic.qpic.cn/avatar.jpg", "duration":"839"}}
    d=839,type=string

    解析json字符串时,需要注意如下几点:
    (1)Go类型和JSON类型的对应关系如下:

    map[string]interface{}代表JSON对象
    []interface{}代表JSON数组
    bool代表JSON booleans
    float64代表JSON numbers
    string代表JSON strings
    nil 代表JSON null

    2.生成json

    假设我们有如下一个类(结构体)student 及其一个实例对象st,将其序列化为json,具体实现如下:

    package main
    
    import (
      "encoding/json"
      "fmt"
    )
    
    type Stu struct {
      Name string `json:"name"`
      Age  int
      sex  string
      Class *Class `json:"class"`
    }
    
    type Class struct {
      Name string
      Grade int
    }
    
    func main() {
    //实例化一个数据结构,用于生成json字符串
      stu := Stu{
        Name: "张三",
        Age: 18,
        sex: "男",
      }
    
      //指针变量
      cla := new(Class)
      cla.Name = "1班"
      cla.Grade = 3
      stu.Class=cla
    
      //Marshal失败时err!=nil
      jsonStu, err := json.Marshal(stu)
      if err != nil {
        fmt.Println("生成json字符串错误")
      }
    
      //jsonStu是[]byte类型,转化成string类型便于查看
      fmt.Println(string(jsonStu))
    }

    程序输出结果:

    {"name":"张三","Age":18,"class":{"Name":"1班","Grade":3}}

    阅读以上代码可以看出:

    (1)只要是可导出成员(变量首字母大写),都可以转成json。因成员变量sex是不可导出的,故无法转成json;

    (2)如果变量打上了json标签,如Name旁边的 json:"name" ,那么转化成的json key就用该标签“name”,否则取字段名作为key,如"Age";

    (3)指针变量,编码时自动转换为它所指向的值,如Class变量;

    (4)强调一句,序列化成功后的json字符串是纯粹的字符串。

    以上就是Golang 如何解析和生成json的详细内容,更多关于golang 解析、生成json的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • golang 实现json类型不确定时的转换
    • golang中json的omitempty使用操作
    • golang:json 反序列化的[]和nil操作
    • 解决Golang json序列化字符串时多了\的情况
    • 解决golang json解析出现值为空的问题
    • golang xorm及time.Time自定义解决json日期格式的问题
    • golang 实现struct、json、map互相转化
    • golang中json小谈之字符串转浮点数的操作
    上一篇:Golang 使用map需要注意的几个点
    下一篇:Go语言中如何通过方法为类型添加行为
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信