在 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)
}