敏捷操作 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()