diff --git a/README.md b/README.md index 4cdacc6..057585b 100644 --- a/README.md +++ b/README.md @@ -467,7 +467,7 @@ decode(JSON, Opts) -> Term JSON = json_text() Term = json_term() Opts = [option() | labels | {labels, Label} | {post_decode, F}] - Label = binary | atom | existing_atom | sloppy_existing_atom + Label = binary | atom | existing_atom | attempt_atom F = fun((any()) -> any()) ``` @@ -477,10 +477,11 @@ term 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 +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 +new atoms to the atom table and will result in a `badarg` error if the atom +does not exist. `attempt_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 diff --git a/src/jsx_to_term.erl b/src/jsx_to_term.erl index 828073d..52bc724 100644 --- a/src/jsx_to_term.erl +++ b/src/jsx_to_term.erl @@ -53,7 +53,7 @@ to_term(Source, Config) when is_list(Config) -> parse_config(Config) -> parse_config(Config, #config{}). parse_config([{labels, Val}|Rest], Config) - when Val == binary; Val == atom; Val == existing_atom; Val == sloppy_existing_atom -> + when Val == binary; Val == atom; Val == existing_atom; Val == attempt_atom -> parse_config(Rest, Config#config{labels = Val}); parse_config([labels|Rest], Config) -> parse_config(Rest, Config#config{labels = binary}); @@ -107,7 +107,7 @@ format_key(Key, Config) -> binary -> Key ; atom -> binary_to_atom(Key, utf8) ; existing_atom -> binary_to_existing_atom(Key, utf8) - ; sloppy_existing_atom -> + ; attempt_atom -> try binary_to_existing_atom(Key, utf8) of Result -> Result catch @@ -140,8 +140,8 @@ config_test_() -> parse_config([{labels, existing_atom}]) )}, {"sloppy existing atom labels", ?_assertEqual( - #config{labels=sloppy_existing_atom}, - parse_config([{labels, sloppy_existing_atom}]) + #config{labels=attempt_atom}, + parse_config([{labels, attempt_atom}]) )}, {"post decode", ?_assertEqual( #config{post_decode=F}, @@ -167,11 +167,11 @@ format_key_test_() -> )}, {"sloppy existing atom key", ?_assertEqual( key, - format_key(<<"key">>, #config{labels=sloppy_existing_atom}) + format_key(<<"key">>, #config{labels=attempt_atom}) )}, {"nonexisting atom key", ?_assertEqual( <<"nonexistentatom">>, - format_key(<<"nonexistentatom">>, #config{labels=sloppy_existing_atom}) + format_key(<<"nonexistentatom">>, #config{labels=attempt_atom}) )} ].