比 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
- json解析模組JSON
- Golang json 解析GolangJSON
- json解析boolJSON
- json解析效能比較(gson與jackson)JSON
- XML與JSON(在更)XMLJSON
- 讓json更懂中文JSON
- 🎩 JSON Wizard for Mac - 解析你的 JSON 資料!🔮JSONMac
- Swift iOS : 解析jsonSwiftiOSJSON
- Golang 流式解析 JsonGolangJSON
- 用JS解析JSONJSON
- java解析json listJavaJSON
- Swift Json解析探索SwiftJSON
- Java解析Json字串JavaJSON字串
- json資料解析JSON
- Android總結之json解析(FastJson Gson 對比)AndroidJSONAST
- Flutter 中的 JSON 解析FlutterJSON
- oracle json 解析函式OracleJSON函式
- 解析大資料json大資料JSON
- ajax解析json物件集合JSON物件
- 課程 1: JSON 解析JSON
- JsonPath —— JSON 解析神器JSON
- 使用jsoncpp解析jsonJSON
- JSON 之FastJson解析JSONAST
- iOS開發-JSON解析iOSJSON
- Json解析之Gson庫JSON
- javascript指令碼中使用json2.js解析jsonJavaScript指令碼JSON
- js 將json字串轉換為json物件的方法解析JSON字串物件
- Protobuffer 和 Json 深度對比JSON
- 細說 Golang 的 JSON 解析GolangJSON
- Flutter開發之JSON解析FlutterJSON
- Flutter JSON 解析懶人攻略FlutterJSON
- Flutter 三種JSON解析方式FlutterJSON
- Flutter 解析JSON 三種方式FlutterJSON
- Spark Structured Streaming 解析 JSONSparkStructJSON
- 使用 Swift 進行 JSON 解析SwiftJSON