encoding/json vs json-iterator

100% Compatibility
默认情况下,jsoniter 不会像标准库那样对映射键进行排序。如果你想要 100% 的兼容性,就这样使用
m := map[string]interface{}{
	"3": 3,
	"1": 1,
	"2": 2,
}
json := jsoniter.ConfigCompatibleWithStandardLibrary
b, err := json.Marshal(m)
最佳实践
默认性能已经比标准库快几倍。如果你想有绝对最好的表现,你可以做以下事情
- 使用 JSONITER。配置最快,这将以 6 位精度(有损)浮点数,这要快得多
- 重用基础流或迭代器实例。ConfigFastest.BorrowIterator 或 jsoniter.ConfigFastest.BorrowStream. 记得在完成后 defer。
- 使用 RegisterTypeEncoder 或 RegisterTypeDecoder,而不是定义 MarshalJSON 或 UnmarshalJSON。减少了不必要的复制
type T struct{}
type Person struct {
	Name    string
	Hobby   string `json:"-"`          // `json:"-"` 忽略字段; `json:"-,"`-> Field appears in JSON as key "-".
	Age     int    `json:"age,string"` // `json:"age,string"`适用于字符串、浮点数、整数或布尔类型
	IsGirl  bool   `json:",omitempty"` // json:",omitempty"省略nil,如果字段值是0,false,nil等省略不展示
	High    float32
	WorkAge int8
	Faimily interface{}
	T       T
}
var p = Person{Name: "maying", Hobby: "滑雪", Age: 30, High: 161.3, Faimily: map[string]interface{}{"father": "爸爸", "Age": 50}, WorkAge: 7}
func jsoniterStandardLibararyMarshal() {
	json := jsoniter.ConfigCompatibleWithStandardLibrary
	json.Marshal(&p)
}
func jsoniterFasterMarshal() {
	stream := jsoniter.ConfigFastest.BorrowStream(nil)
	defer jsoniter.ConfigFastest.ReturnStream(stream)
	stream.WriteVal(p)
	//fmt.Println(string(stream.Buffer()))
}
func jsonMarshal() {
	json.Marshal(p)
	//fmt.Println(string(b))
}
func Benchmark_jsoniterStandardLibararyMarshal(b *testing.B) {
	for i := 0; i < b.N; i++ {
		jsoniterStandardLibararyMarshal()
	}
}
func Benchmark_jsonMarshal(b *testing.B) {
	for i := 0; i < b.N; i++ {
		jsonMarshal()
	}
}
func Benchmark_jsoniterFasterMarshal(b *testing.B) {
	for i := 0; i < b.N; i++ {
		jsonMarshal()
	}
}



![[羊城杯 2020]black cat - 文件隐写+RCE(hash_hmac绕过)](https://img-blog.csdnimg.cn/d9a8ccc3557e42848e183427d9f5286f.png#pic_center)















