hujson icon indicating copy to clipboard operation
hujson copied to clipboard

Add Standardizer

Open dsnet opened this issue 2 years ago • 0 comments

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%

dsnet avatar Nov 15 '23 22:11 dsnet