@@ -20,6 +20,7 @@ import (
2020 "encoding/json"
2121 "testing"
2222
23+ "github.com/buger/jsonparser"
2324 jsoniter "github.com/json-iterator/go"
2425)
2526
@@ -166,31 +167,31 @@ func BenchmarkJsonParserLarge(b *testing.B) {
166167 b .Fatal (err )
167168 }
168169 iter := pj .Iter ()
169- elem , err = iter .FindElement ("users" , elem )
170+ elem , err = iter .FindElement (elem , "users" )
170171 if checkErrs && err != nil {
171172 b .Fatal (err )
172173 }
173174 ar , err = elem .Iter .Array (ar )
174175 if checkErrs && err != nil {
175176 b .Fatal (err )
176177 }
177- ar .ForEach (func (t Type , i Iter ) {
178- elem , err = i .FindElement ("username" , elem )
178+ ar .ForEach (func (i Iter ) {
179+ elem , err = i .FindElement (elem , "username" )
179180 if checkErrs && err != nil {
180181 b .Fatal (err )
181182 }
182183 _ , _ = elem .Iter .StringBytes ()
183184 })
184185
185- elem , err = iter .FindElement ("topics/topics " , elem )
186+ elem , err = iter .FindElement (elem , "topics" , "topics" )
186187 if checkErrs && err != nil {
187188 b .Fatal (err )
188189 }
189190 ar , err = elem .Iter .Array (ar )
190191 if checkErrs && err != nil {
191192 b .Fatal (err )
192193 }
193- ar .ForEach (func (t Type , i Iter ) {
194+ ar .ForEach (func (i Iter ) {
194195 if true {
195196 // Use foreach...
196197 obj , err = i .Object (obj )
@@ -213,13 +214,13 @@ func BenchmarkJsonParserLarge(b *testing.B) {
213214
214215 }, onlyKeys )
215216 } else {
216- elem , err = i .FindElement ("id" , elem )
217+ elem , err = i .FindElement (elem , "id" )
217218 if checkErrs && err != nil {
218219 b .Fatal (err )
219220 }
220221 _ , _ = elem .Iter .Int ()
221222 //b.Log(elem.Iter.Int())
222- elem , err = i .FindElement ("slug" , elem )
223+ elem , err = i .FindElement (elem , "slug" )
223224 if checkErrs && err != nil {
224225 b .Fatal (err )
225226 }
@@ -230,3 +231,37 @@ func BenchmarkJsonParserLarge(b *testing.B) {
230231 }
231232 })
232233}
234+
235+ func BenchmarkBugerJsonParserLarge (b * testing.B ) {
236+ largeFixture := loadCompressed (b , "payload-large" )
237+ const logVals = false
238+ b .SetBytes (int64 (len (largeFixture )))
239+ b .ReportAllocs ()
240+ b .ResetTimer ()
241+ var dump int
242+ for i := 0 ; i < b .N ; i ++ {
243+ jsonparser .ArrayEach (largeFixture , func (value []byte , dataType jsonparser.ValueType , offset int , err error ) {
244+ sval , _ , _ , _ := jsonparser .Get (value , "username" )
245+ if logVals && i == 0 {
246+ b .Log (string (sval ))
247+ }
248+ dump += len (sval )
249+ }, "users" )
250+
251+ jsonparser .ArrayEach (largeFixture , func (value []byte , dataType jsonparser.ValueType , offset int , err error ) {
252+ ival , _ := jsonparser .GetInt (value , "id" )
253+ if logVals && i == 0 {
254+ b .Log (ival )
255+ }
256+ dump += int (ival )
257+ sval , _ , _ , _ := jsonparser .Get (value , "slug" )
258+ if logVals && i == 0 {
259+ b .Log (string (sval ))
260+ }
261+ dump += len (sval )
262+ }, "topics" , "topics" )
263+ }
264+ if dump == 0 {
265+ b .Log ("" )
266+ }
267+ }
0 commit comments