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

  

posted @ 2018-11-27 00:14  不骄不傲  阅读(3232)  评论(0编辑  收藏  举报