Add Standardizer
Standardizer wraps an io.Reader that reads from a HuJSON stream and implements an io.Reader that reads back standard JSON.
Unlike the Standardize helper function, it does not validate HuJSON. It only guarantees that it produces valid JSON if and only if the input is valid HuJSON. It relies on a downstream JSON parser to detect various forms of syntactic errors.
Since it does not validate JSON, it is faster and more memory efficient. The Standardize helper operates by producing an AST, and then modifying the AST to produce standardized JSON. Standardizer uses a finite state machine to identify sections of comments and trailing commas and elides them when reading. In the common case, it requires no additional memory.
Performance:
name old time/op new time/op delta
Standardizer 1.22µs ± 2% 0.15µs ± 4% -87.86%
name old alloc/op new alloc/op delta
Standardizer 848B ± 0% 0B -100.00%
name old allocs/op new allocs/op delta
Standardizer 15.0 ± 0% 0.0 -100.00%