Featured image of post go语言原生json库和gojsonq库解析多层json速度对比

go语言原生json库和gojsonq库解析多层json速度对比

一.前言

本人今天在研究第三方json解析库的时候无意间发现了原生json库也很方便,所以我就很好奇第三方json库和原生库速度差距有多大

二.细节说明

第三方库我采用的是gojsonq库,因为gojsonq库是我用过的最简单的go语言json解析库。原生方面,我看了很多教程解析多层json都很复杂,最后我突发奇想结构体是可以套娃的,那么为什么不给原生库传参一个套娃的结构体呢。

三.代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
 
import (
	"encoding/json"
	"fmt"
	"time"
 
	gojsonq "github.com/thedevsaddam/gojsonq/v2"
)
 
func main() {
	incode := "{\"code\":3,\"data\":{\"data1\":1,\"data2\":2}}"
	//原生
	timeStampN := time.Now().UnixNano()
	for i := 0; i < 1000; i++ {
		type twos struct {
			Data1 int `json:"data1"`
			Data2 int `json:"data2"`
		}
		type ones struct {
			Code int  `json:"code"`
			Data twos `json:"data"`
		}
		var one ones
		json.Unmarshal([]byte(incode), &one)
		fmt.Println(one.Code)
		fmt.Println(one.Data.Data1)
	}
	timeStampN1 := time.Now().UnixNano()
	//第三方
	for i := 0; i < 1000; i++ {
		fmt.Println(gojsonq.New().FromString(incode).Find("code"))
		fmt.Println(gojsonq.New().FromString(incode).Find("data.data1"))
	}
	timeStampN2 := time.Now().UnixNano()
	fmt.Println("原生速度")
	fmt.Println(timeStampN1 - timeStampN)
	fmt.Println("第三方速度")
	fmt.Println(timeStampN2 - timeStampN1)
}

四.结论

原生库耗时203779500纳秒,第三方库耗时205282900纳秒,由此可见速度基本上差不多。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计
© 2021 ckappblog.com 版权所有
蜀ICP备2021015106号
川公网安备 51010602001393号