golang json基本操作

JSON解析内置反射方式

import (
    "encoding/json"
    "fmt"
)
 
type Users struct {
    ID   string `json:"id"`
    Name string `json:"name"`
    Age  int    `json:"age"`
}
 
func main() {
    //结构体解析成json
    user1 := Users{"1", "user1", 22}
    s, err := json.Marshal(user1)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(string(s))
    }
    //json解析到结构体
    var user2 Users
    err = json.Unmarshal(s, &user2)
    if err == nil {
        fmt.Println(user2)
    }
    //map解析成json
    m := make(map[string]interface{}, 2)
    m["id"] = "a"
    m["name"] = "bb"
    var data []byte
    if data, err = json.Marshal(m); err == nil {
        fmt.Println(string(data))
    }
    //json解析成map
    if err = json.Unmarshal(data, &m); err == nil {
        fmt.Println(m)
    }
 
}

easyJSON高性能代码生成解析JSON

安装:
go get github.com/mailru/easyjson
如果失败,可以将项目克隆到$GOPATH/src/mailru 目录下 并将包名改为easyjson,然后进入easyjson包下的easyjson目录,运行go build 命令,再将生成的二进制文件放到$GOPATH/bin目录下并改名为easyjson

使用:输入命令easyjson -all models.go生成文件

type BasicInfo struct {
    Name string
    Age  int   
}
type JobInfo struct {
    Skills []string
}
type Employee struct {
    BasicInfo BasicInfo
    JobInfo   JobInfo  
}
 
var jsonStr = `{
    "basic_info":{
        "name":"Mike",
        "age":30
    },
    "job_info":{
        "skills":["Java","Go","C"]
    }
}   `
 
func TestEasyJSON(t *testing.T) {
    e := Employee{}
  //调用easyJSON生成函数解析json
    e.UnmarshalJSON([]byte(jsonStr))
    t.Log(e)
  //调用easyJSON生成函数解析json
    if v, err := e.MarshalJSON(); err != nil {
        t.Error(err)
    } else {
        t.Log(string(v))
    }
}
原文地址:https://www.cnblogs.com/enumx/p/12317955.html