A high-performance 100% compatible drop-in replacement of "encoding/json"
吐槽一下,这么NB了一个logo都没有:)
How to get
go get github.com/json-iterator/go
Usage
100% compatibility with standard lib
Replace
import "encoding/json"
json.Marshal(&data)
with
import "github.com/json-iterator/go"
var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Marshal(&data)
Replace
import "encoding/json"
json.Unmarshal(input, &data)
with
import "github.com/json-iterator/go"
var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Unmarshal(input, &data)
解码比对
import (
"fmt"
"testing"
"encoding/json"
"github.com/Jeffail/gabs"
"github.com/json-iterator/go"
)
type Data struct {
Id string `json:"id"`
ValueInt int64 `json:"valueInt"`
ValueFloat float64 `json:"valueFloat"`
ValueString string `json:"valueString"`
}
func TestDecode(t *testing.T) {
jsonData:=gabs.New()
jsonData.Set("1234567890","id")
jsonData.Set(123,"valueInt")
jsonData.Set(123.456,"valueFloat")
jsonData.Set("aaaaaaaaaaaaaaaaaab","valueString")
bytes:=jsonData.Bytes()
//标准库解码1000000次
{
data:=&Data{}
start:=CurrentTime()
for i:=0;i<1000000;i++ {
err:=json.Unmarshal(bytes,data)
if err!=nil {
fmt.Println(err)
}
}
end:=CurrentTime()
//打印总耗时
fmt.Println("use time:",end-start)
fmt.Println(data)
}
//NB库解码1000000次
{
var json = jsoniter.ConfigCompatibleWithStandardLibrary
data:=&Data{}
start:=CurrentTime()
for i:=0;i<1000000;i++ {
err:=json.Unmarshal(bytes,data)
if err!=nil {
fmt.Println(err)
}
}
end:=CurrentTime()
//打印总耗时
fmt.Println("fast use time:",end-start)
fmt.Println(data)
}
}
-----------------------------------------------------
use time: 2714
&{1234567890 123 123.456 aaaaaaaaaaaaaaaaaab}
fast use time: 737
&{1234567890 123 123.456 aaaaaaaaaaaaaaaaaab}
结果来看标准库用时2714毫秒,nb库用时737毫秒,确实比标准库快很多。
编码比对
import (
"fmt"
"testing"
"encoding/json"
"github.com/json-iterator/go"
)
type Data struct {
Id string `json:"id"`
ValueInt int64 `json:"valueInt"`
ValueFloat float64 `json:"valueFloat"`
ValueString string `json:"valueString"`
}
func TestEncode(t *testing.T) {
data:=&Data{
Id:"1234",
ValueInt:123,
ValueFloat:123.456,
ValueString:"12345",
}
//标准库编码1000000次
{
start:=CurrentTime()
for i:=0;i<1000000;i++ {
_,err:=json.Marshal(data)
if err!=nil {
fmt.Println(err)
}
}
end:=CurrentTime()
//打印总耗时
fmt.Println("use time:",end-start)
}
//NB库编码1000000次
{
var json = jsoniter.ConfigCompatibleWithStandardLibrary
start:=CurrentTime()
for i:=0;i<1000000;i++ {
_,err:=json.Marshal(data)
if err!=nil {
fmt.Println(err)
}
}
end:=CurrentTime()
//打印总耗时
fmt.Println("fast use time:",end-start)
}
}
-------------------------------------------------------
use time: 1058
fast use time: 727
结果来看标准库用时1058毫秒,nb库用时727毫秒,确实比标准库快很多。