敏捷操作 json 数据并且性能优于官方 encoding/json 库
读取 JSON
package main
import (
"github.com/sohaha/zlsgo/zjson"
"github.com/sohaha/zlsgo/zlog"
)
// json 数据
var data = `
{"name":"栗子","likes":[666,false],"other":{"type":"妖精"}}`
type example struct {
Name string `json:"name"`
Likes []interface{} `json:"likes"`
Other string `json:"other"`
}
type exampleOther struct {
Type string `json:"type"`
}
var name string
var like int
func main() {
// 快捷获取指定字段的值
name = zjson.Get(data, "name").String()
like = zjson.Get(data, "likes.0").Int()
zlog.Success("我是:", name, "喜欢:", like)
// 等同上面
jsonData := zjson.Parse(data)
name = jsonData.Get("name").String()
like = jsonData.Get("likes.0").Int()
zlog.Success("我是:", name, "喜欢:", like)
// 解码为数据结构
var exampleJson example
if err := zjson.Unmarshal(data, &exampleJson); err != nil {
zlog.Error(err)
}
zlog.Success("我是:", exampleJson.Name, "喜欢:", exampleJson.Likes[0])
zlog.Success(exampleJson.Other)
// 子字段解码为数据结构
var exampleJsonOther exampleOther
if err := jsonData.Get("other").Unmarshal(&exampleJsonOther); err != nil {
zlog.Error(err)
}
zlog.Success(exampleJsonOther)
}
zjson.Get(json数据源,下标)
设置 JSON
package main
import (
"github.com/sohaha/zlsgo/zjson"
"github.com/sohaha/zlsgo/zlog"
)
type example struct {
Name string `json:"name"`
Likes []interface{} `json:"likes"`
Other string `json:"other"`
}
func main() {
data := `{"Other":"appId"}`
// 快捷设置指定字段的值
data, _ = zjson.Set(data, "name", "Demo")
data, _ = zjson.Set(data, "likes.0", 666)
zlog.Success(data)
// 等同上面
data, _ = zjson.Set("", "", &example{"Demo", []interface{}{666}, "appId"})
zlog.Success(data)
}
zjson.Set(json数据源,下标,值)
// 转 json
jsonStr := zjson.Stringify(json)
// json 转 zsjon 对象
res := zjson.Parse(jsonStr)
res.get("xx").String()
// 等等...,参考 <https://godoc.org/github.com/sohaha/zlsgo/zjson>
zjson.Marshal()
zjson.Unmarshal()