Go语言基础8 | 青训营笔记

66 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第8天

基础语法

JSON处理

JavaScript对象表示法(JSON)是一种用于发送和接收结构化信息的标准协议。在类似的协议中,JSON并不是唯一的一个标准协议。但是由于简洁性、可读性和流行程度等原因,JSON是应用最广泛的一个。 Golang里的json操作非常简单,对于一个已有的结构体,我们什么都不需要做,只需要保证每一个字段的第一个字母是大写,也就是在Golang里的公开的字段。下面这个结构体(这样的数据结构特别适合JSON格式,并且在两者之间相互转换也很容易)就可以用json.Marshal()来序列化,可以变成半个数组,也可以简单理解为字符串,打印的时候用string强制类型转换即可,否则会打印出一些十六进制的编码。这个过程是叫做编组(marshaling)。Marshal函数返回一个编码后的字节slice,包含很长的字符串,并且是没有空白缩进的。 序列化后的字符串我们也可以用json.Unmarshal()去反序列化到一个空的变量里面。我们序列化下的字符串,它的风格是大写字母开头。如果我们想要输出那种小写的下划线的风格的话,我们可以字段结构体后面加一个json的tag,例如json:"age"

import {
    "encoding/json"
    "fmt"
}

type userInfo struct {
    Name  string
    Age   int `json:"age"`
    Hobby []string
}

func main() {
    a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
    buf, err := json.Marshal(a)
    if err != nil {
        panic(err)
    }
    fmt.Println(buf)         // [123 34 78 97...]
    fmt.Println(string(buf)) // {"Name":"wang", "age":18, "hobby":["Golang","TypeScript"]}
    
    buf, err = json.MarshalIndent(a, "", "\t")
    if err != nil {
        panic(err)
    }
    fmt.Println(string(buf))
    
    var b userInfo
    err = json.Unmarshal(buf, &b)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}

引用参考:Go语言圣经(中文版)