在 golang 中处理 json 使用内置的 encoding/json 标准库。下面示例介绍了通过 map 和结构体 struct 编码 json ,以及解析 json 到结构体中。
json encode
编码 json 使用 json.Marshal() 函数可以对一组数据进行 JSON 格式的编码。
package main
import (
    "encoding/json"
    "fmt"
)
type Person struct {
    Name  string
    Hobby string
}
func main() {
    // 通过 struct 生成 json
    p := Person{"zhang", "Golf"}
    b, err := json.Marshal(p)
    if err != nil {
        fmt.Println("json err ", err)
    }
    fmt.Println(string(b))
    // 通过 map 生成 json
    student := make(map[string]interface{})
    student["name"] = "Lucy"
    student["age"]  = 21
    student["sex"]  = "female"
    b2, err2 := json.Marshal(student)
    if err2 != nil {
        fmt.Println("json err ", err2)
    }
    fmt.Println(string(b2))
}
json decode
解码 json 使用 json.Unmarshal() 函数可以对一组数据进行 JSON 格式的解码。
package main
import (
    "encoding/json"
    "fmt"
)
type Person struct {
    Name  string   `json:"name"`
    Hobby []string `json:"hobby"`
    Age   int      `json:"age, string"` // 转换类型
    Addr  Addr     `json:"addr"`
}
type Addr struct {
    Province string `json:"province"`
    City     string `json:"city"`
}
func main() {
    // 解析json到结构体
    b := []byte(`{
        "age":"21",
        "name":"Lucy",
        "hobby":[
            "Golf", 
            "Basketball"
        ], 
        "addr": {
            "province": "Hubei", 
            "city": "Wuhan"
        }
    }`)
    var p Person
    if err := json.Unmarshal(b, &p); err3 != nil {
        fmt.Println("json err ", err)
    }
    fmt.Printf("%#v", p)
}
				