一.前言
本人今天在研究第三方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纳秒,由此可见速度基本上差不多。