比 encoding/json 更快地解析 json
https://github.com/json-iterator/go
直接替換 json.Unmarshal
仍然使用反射實現,但是比 encoding/json 的版本更快。完整的測試程式碼:https://github.com/json-iterator/go-benchmark
func Benchmark_array_by_stardard_lib(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
sample := make([]int, 0, 10)
json.Unmarshal([]byte(`[1,2,3,4,5,6,7,8,9]`), &sample)
}
}
500000 2478 ns/op 408 B/op 14 allocs/op
func Benchmark_array_by_jsoniter(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
sample := make([]int, 0, 10)
jsoniter.Unmarshal([]byte(`[1,2,3,4,5,6,7,8,9]`), &sample)
}
}
2000000 740 ns/op 224 B/op 4 allocs/op
和 encoding/json 的區別是,標準庫使用的是 reflect.ValueOf,然後根據 json 的輸入情況去找對應的 field 和 element。而 jsoniter 的實現是反過來的,用 reflect.TypeOf 確定一個 json 的 schema,然後根據 schema 產生對應的 decoder。如果 json 輸入不符合這個 decoder 則報錯。
StAX 風格的 API
如果使用更底層的 api,可以完全避免反射的開銷
func Benchmark_array_by_jsoniter_direct(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
sample := make([]uint64, 0, 10)
iter := jsoniter.ParseString(`[1,2,3,4,5,6,7,8,9]`)
for iter.ReadArray() {
sample = append(sample, iter.ReadUint64())
}
}
}
3000000 455 ns/op 112 B/op 2 allocs/op
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- encoding/json 怎麼將日期字串解析成time.Time格式EncodingJSON字串
- 讓 json 解析更簡單高效的 GJSONJSON
- 如何與NPM package-lock.json愉快地玩耍NPMPackageJSON
- Exercise:JSON解析JSON
- cJSON:解析JSONJSON
- js json解析JSON
- XML與JSON(在更)XMLJSON
- Golang 流式解析 JsonGolangJSON
- 用JS解析JSONJSON
- java解析json listJavaJSON
- Swift iOS : 解析jsonSwiftiOSJSON
- json解析模組JSON
- 🎩 JSON Wizard for Mac - 解析你的 JSON 資料!🔮JSONMac
- Flutter 中的 JSON 解析FlutterJSON
- oracle json 解析函式OracleJSON函式
- Spark Structured Streaming 解析 JSONSparkStructJSON
- ajax解析json物件集合JSON物件
- 解析大資料json大資料JSON
- 比 JSON.stringify 快兩倍的fast-json-stringifyJSONAST
- springboot去讀json檔案解析json陣列處理Spring BootJSON陣列
- linux下json解析神器----jqLinuxJSON
- Python中解析json資料PythonJSON
- Flutter開發之JSON解析FlutterJSON
- 細說 Golang 的 JSON 解析GolangJSON
- Flutter JSON 解析懶人攻略FlutterJSON
- android解析HashMap格式的jsonAndroidHashMapJSON
- Java JSON組成和解析JavaJSON
- 使用JSONPath解析JSON資料JSON
- android使用Gson來解析jsonAndroidJSON
- Flutter 三種JSON解析方式FlutterJSON
- Flutter 解析JSON 三種方式FlutterJSON
- CYQ.Data 操作 Json 效能測試:對比 Newtonsoft.JsonJSON
- Flutter json解析json_serializable的使用及自動化生成模板FlutterJSON
- 字串值提取工具-09-java 執行 json 解析, json-path字串JavaJSON
- python比較json/dictionary的庫PythonJSON
- XML 與 JSON 優劣對比XMLJSON
- Protobuf 為啥比 JSON、XML 牛?JSONXML
- python 從TXT中解析json格式PythonJSON
- 手寫javascript json解析器JavaScriptJSON