Add sloppy_existing_atom as a configuration option for labels

This commit is contained in:
John Daily 2013-07-03 21:51:26 -04:00
parent 352d6b21cb
commit 1da0c567ba
2 changed files with 28 additions and 8 deletions

View file

@ -467,18 +467,20 @@ decode(JSON, Opts) -> Term
JSON = json_text()
Term = json_term()
Opts = [option() | labels | {labels, Label} | {post_decode, F}]
Label = binary | atom | existing_atom
Label = binary | atom | existing_atom | sloppy_existing_atom
F = fun((any()) -> any())
```
`decode` parses a json text (a `utf8` encoded binary) and produces an erlang
term
the option `labels` controls how keys are converted from json to erlang terms.
`binary` does no conversion beyond normal escaping. `atom` converts keys to
erlang atoms and results in a badarg error if the keys fall outside the range of
erlang atoms. `existing_atom` is identical to `atom` except it will not add new
atoms to the atom table
the option `labels` controls how keys are converted from json to
erlang terms. `binary` (the default behavior) does no conversion
beyond normal escaping. `atom` converts keys to erlang atoms and
results in a badarg error if the keys fall outside the range of erlang
atoms. `existing_atom` is identical to `atom` except it will not add
new atoms to the atom table. `sloppy_existing_atom` will convert keys
to atoms when they exist, and leave them as binary otherwise
`{post_decode, F}` is a user defined function of arity 1 that is called on each
output value (objects, arrays, strings, numbers and literals). it may return any
@ -709,4 +711,4 @@ jsx wouldn't be what it is without the contributions of [paul davis](https://git
[rebar]: https://github.com/rebar/rebar
[meck]: https://github.com/eproxus/meck
[rfc4627]: http://tools.ietf.org/html/rfc4627
[travis]: https://travis-ci.org/
[travis]: https://travis-ci.org/