This project implements a read-only JSON parser in Go
This file provides a custom JSON parser suitable for processing Twitter data. Some differences from the standard Golang json package:
- Parses numbers into int64 where possible, float64 otherwise.
- Faster! Probably due to less reflection:
Real-world Tweet example (Std is encoding/json):
BenchmarkStdJSON 10000 158362 ns/op BenchmarkJSON 10000 122690 ns/op
The following numbers use a contrived small example. Untyped unmarshals
into an []interface{}
while Bucket unmarshals into a type using reflection:
BenchmarkStdBucket 200000 10781 ns/op BenchmarkBucket 500000 5455 ns/op BenchmarkUntypedBucket 1000000 2747 ns/op
This library also performs escaped UTF-8 entity decoding on strings, so you
get the raw runes instead of escaped \u####
sequences.
This is a relatively new JSON parser so there's certainly edge cases which may throw errors or otherwise parse incorrectly. Please file bugs / submit tests! I'm happy to fix issues.
That being said, this library is very compatible with Twitter's JSON encoding. It has been able to parse messages from Twitter's 1% stream for hours without issue.
Run
go get github.com/kurrik/json
Include in your source:
import "github.com/kurrik/json"
Run
go get -u github.com/kurrik/json
go test -bench=".*"
Most edge cases are tested in compat_test.go
. Please add cases if you find
any!