package test import ( "encoding/json" "github.com/json-iterator/go" "io/ioutil" "os" "testing" ) //func Test_large_file(t *testing.T) { // file, err := os.Open("/tmp/large-file.json") // if err != nil { // t.Fatal(err) // } // iter := Parse(file, 4096) // count := 0 // for iter.ReadArray() { // iter.Skip() // count++ // } // if count != 11351 { // t.Fatal(count) // } //} func init() { ioutil.WriteFile("/tmp/large-file.json", []byte(`[{ "person": { "id": "d50887ca-a6ce-4e59-b89f-14f0b5d03b03", "name": { "fullName": "Leonid Bugaev", "givenName": "Leonid", "familyName": "Bugaev" }, "email": "leonsbox@gmail.com", "gender": "male", "location": "Saint Petersburg, Saint Petersburg, RU", "geo": { "city": "Saint Petersburg", "state": "Saint Petersburg", "country": "Russia", "lat": 59.9342802, "lng": 30.3350986 }, "bio": "Senior engineer at Granify.com", "site": "http://flickfaver.com", "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/d50887ca-a6ce-4e59-b89f-14f0b5d03b03", "employment": { "name": "www.latera.ru", "title": "Software Engineer", "domain": "gmail.com" }, "facebook": { "handle": "leonid.bugaev" }, "github": { "handle": "buger", "id": 14009, "avatar": "https://avatars.githubusercontent.com/u/14009?v=3", "company": "Granify", "blog": "http://leonsbox.com", "followers": 95, "following": 10 }, "twitter": { "handle": "flickfaver", "id": 77004410, "bio": null, "followers": 2, "following": 1, "statuses": 5, "favorites": 0, "location": "", "site": "http://flickfaver.com", "avatar": null }, "linkedin": { "handle": "in/leonidbugaev" }, "googleplus": { "handle": null }, "angellist": { "handle": "leonid-bugaev", "id": 61541, "bio": "Senior engineer at Granify.com", "blog": "http://buger.github.com", "site": "http://buger.github.com", "followers": 41, "avatar": "https://d1qb2nb5cznatu.cloudfront.net/users/61541-medium_jpg?1405474390" }, "klout": { "handle": null, "score": null }, "foursquare": { "handle": null }, "aboutme": { "handle": "leonid.bugaev", "bio": null, "avatar": null }, "gravatar": { "handle": "buger", "urls": [ ], "avatar": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510", "avatars": [ { "url": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510", "type": "thumbnail" } ] }, "fuzzy": false }, "company": "hello" }]`), 0666) } /* 200000 8886 ns/op 4336 B/op 6 allocs/op 50000 34244 ns/op 6744 B/op 14 allocs/op */ func Benchmark_jsoniter_large_file(b *testing.B) { b.ReportAllocs() for n := 0; n < b.N; n++ { file, _ := os.Open("/tmp/large-file.json") iter := jsoniter.Parse(jsoniter.ConfigDefault, file, 4096) count := 0 iter.ReadArrayCB(func(iter *jsoniter.Iterator) bool { // Skip() is strict by default, use --tags jsoniter-sloppy to skip without validation iter.Skip() count++ return true }) file.Close() if iter.Error != nil { b.Error(iter.Error) } } } func Benchmark_json_large_file(b *testing.B) { b.ReportAllocs() for n := 0; n < b.N; n++ { file, _ := os.Open("/tmp/large-file.json") bytes, _ := ioutil.ReadAll(file) file.Close() result := []struct{}{} err := json.Unmarshal(bytes, &result) if err != nil { b.Error(err) } } }