mirror of https://github.com/tidwall/gjson.git
added reset timer to all benchmarks
This commit is contained in:
parent
aed5ee957a
commit
550c66c276
25
README.md
25
README.md
|
@ -188,6 +188,16 @@ if gjson.Get(json, "name.last").Exists(){
|
|||
}
|
||||
```
|
||||
|
||||
## Unmarshal to a map
|
||||
|
||||
To unmarshal to a `map[string]interface{}`:
|
||||
|
||||
```go
|
||||
m, ok := gjson.Parse(json).Value().(map[string]interface{})
|
||||
if !ok{
|
||||
// not a map
|
||||
}
|
||||
```
|
||||
|
||||
## Performance
|
||||
|
||||
|
@ -197,13 +207,14 @@ Benchmarks of GJSON alongside [encoding/json](https://golang.org/pkg/encoding/js
|
|||
and [jsonparser](https://github.com/buger/jsonparser)
|
||||
|
||||
```
|
||||
BenchmarkGJSONGet-8 3000000 368 ns/op 0 B/op 0 allocs/op
|
||||
BenchmarkJSONUnmarshalMap-8 600000 9181 ns/op 3048 B/op 69 allocs/op
|
||||
BenchmarkJSONUnmarshalStruct-8 600000 9256 ns/op 1832 B/op 69 allocs/op
|
||||
BenchmarkJSONDecoder-8 300000 14365 ns/op 4224 B/op 184 allocs/op
|
||||
BenchmarkFFJSONLexer-8 1500000 3569 ns/op 896 B/op 8 allocs/op
|
||||
BenchmarkEasyJSONLexer-8 3000000 973 ns/op 613 B/op 6 allocs/op
|
||||
BenchmarkJSONParserGet-8 3000000 531 ns/op 21 B/op 0 allocs/op
|
||||
BenchmarkGJSONGet-8 15000000 333 ns/op 0 B/op 0 allocs/op
|
||||
BenchmarkGJSONUnmarshalMap-8 900000 4188 ns/op 1920 B/op 26 allocs/op
|
||||
BenchmarkJSONUnmarshalMap-8 600000 8908 ns/op 3048 B/op 69 allocs/op
|
||||
BenchmarkJSONUnmarshalStruct-8 600000 9026 ns/op 1832 B/op 69 allocs/op
|
||||
BenchmarkJSONDecoder-8 300000 14339 ns/op 4224 B/op 184 allocs/op
|
||||
BenchmarkFFJSONLexer-8 1500000 3156 ns/op 896 B/op 8 allocs/op
|
||||
BenchmarkEasyJSONLexer-8 3000000 938 ns/op 613 B/op 6 allocs/op
|
||||
BenchmarkJSONParserGet-8 3000000 442 ns/op 21 B/op 0 allocs/op
|
||||
```
|
||||
|
||||
JSON document used:
|
||||
|
|
|
@ -781,6 +781,7 @@ var benchPaths = []string{
|
|||
|
||||
func BenchmarkGJSONGet(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
if Get(exampleJSON, benchPaths[j]).Type == Null {
|
||||
|
@ -793,10 +794,11 @@ func BenchmarkGJSONGet(t *testing.B) {
|
|||
|
||||
func BenchmarkGJSONUnmarshalMap(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
parts := strings.Split(benchPaths[j], ".")
|
||||
m := Parse(exampleJSON).Value().(map[string]interface{})
|
||||
m, _ := Parse(exampleJSON).Value().(map[string]interface{})
|
||||
var v interface{}
|
||||
for len(parts) > 0 {
|
||||
part := parts[0]
|
||||
|
@ -820,6 +822,7 @@ func BenchmarkGJSONUnmarshalMap(t *testing.B) {
|
|||
|
||||
func BenchmarkJSONUnmarshalMap(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
parts := strings.Split(benchPaths[j], ".")
|
||||
|
@ -850,6 +853,7 @@ func BenchmarkJSONUnmarshalMap(t *testing.B) {
|
|||
|
||||
func BenchmarkJSONUnmarshalStruct(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
var s BenchStruct
|
||||
|
@ -877,6 +881,7 @@ func BenchmarkJSONUnmarshalStruct(t *testing.B) {
|
|||
|
||||
func BenchmarkJSONDecoder(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
dec := json.NewDecoder(bytes.NewBuffer([]byte(exampleJSON)))
|
||||
|
@ -922,6 +927,7 @@ func BenchmarkJSONDecoder(t *testing.B) {
|
|||
|
||||
func BenchmarkFFJSONLexer(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
l := fflib.NewFFLexer([]byte(exampleJSON))
|
||||
|
@ -964,7 +970,6 @@ func BenchmarkFFJSONLexer(t *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkEasyJSONLexer(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
skipCC := func(l *jlexer.Lexer, n int) {
|
||||
for i := 0; i < n; i++ {
|
||||
l.Skip()
|
||||
|
@ -980,6 +985,8 @@ func BenchmarkEasyJSONLexer(t *testing.B) {
|
|||
l.Delim('}')
|
||||
l.WantComma()
|
||||
}
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j := 0; j < len(benchPaths); j++ {
|
||||
l := &jlexer.Lexer{Data: []byte(exampleJSON)}
|
||||
|
@ -1049,8 +1056,8 @@ func BenchmarkJSONParserGet(t *testing.B) {
|
|||
for i := 0; i < len(benchPaths); i++ {
|
||||
keys = append(keys, strings.Split(benchPaths[i], "."))
|
||||
}
|
||||
t.ResetTimer()
|
||||
t.ReportAllocs()
|
||||
t.ResetTimer()
|
||||
for i := 0; i < t.N; i++ {
|
||||
for j, k := range keys {
|
||||
if j == 1 {
|
||||
|
|
Loading…
Reference in New Issue