go JSON解析 JSON编码
编码
定义一个结构体用来放需要进行JSON编码的数据,结构体的字段名必须是大写开头的可导出字段,否则在解析时会解析不出来
使用json.Marshal(v interface{}) ([]byte, error)进行JSON编码
type Userinfo struct { Id int `json:"id"` Username string `json:"username"` } u := &Userinfo{} u.Id = 1 u.Username = "lauwen" j, err := json.Marshal(u) if err != nil { fmt.Println(err) } fmt.Println(string(j))
上述代码输出:
{"id":1,"username":"lauwen"}
解析
使用json.Unmarshal(data []byte, v interface{}) error来进行JSON数据的解析,可以看出第一个参数是[]byte类型数据,所以在使用时需要将字符串类型的JSON数据转换为[]byte类型。
- 以下使用的解析的JSON字符串都由上一步编码而来,为[]byte类型,无需再转类型。
- 使用的结构体类型也是上面编码时使用到的结构体,不做重复定义。
JSON解析为结构体
已知JSON结构的时候,可以定义一个结构体来存放JSON解析出来的数据
var ui Userinfo err = json.Unmarshal(j, &ui) fmt.Println(ui)
以上代码输出:
{1 lauwen}
JSON解析为map
不清楚JSON数据结构时,可以使用map的来存放JSON解析出来的数据;如下,首先定义了一个map类型数据来接收解析后的JSON数据
var dj map [string] interface{} err = json.Unmarshal(j, &dj) fmt.Println(dj)
以上代码输出:
map[id:1 username:lauwen]
完整代码
package main import ( "encoding/json" "fmt" ) func main() { type Userinfo struct { Id int `json:"id"` Username string `json:"username"` } u := &Userinfo{} u.Id = 1 u.Username = "lauwen" j, err := json.Marshal(u) if err != nil { fmt.Println(err) } fmt.Println(string(j)) var ui Userinfo err = json.Unmarshal(j, &ui) fmt.Println(ui) var dj map [string] interface{} err = json.Unmarshal(j, &dj) fmt.Println(dj) }