JSON decoding/encoding module.
decode_option() = {object_format, tuple | proplist | map}
object_format:
tuple
: An object is decoded as {[]}
if it is empty, otherwise {[{Key, Value}]}
. proplist
: An object is decoded as [{}]
if it is empty, otherwise [{Key, Value}]
. map
: An object is decoded as #{}
if it is empty, otherwise #{Key => Value}
. tuple
encode_option() = native_utf8 | {space, non_neg_integer()} | {indent, non_neg_integer()}
native_utf8
:
{space, N}
:
N
spaces after every commna and colon 0
{indent, N}
:
N
spaces for each level of indentation 0
json_array() = [json_value()]
json_boolean() = boolean()
json_number() = number()
json_object() = json_object_format_tuple() | json_object_format_proplist() | json_object_format_map()
json_object_format_map() = #{}
json_object_format_proplist() = [{}] | json_object_members()
json_object_format_tuple() = {json_object_members()}
json_object_members() = [{json_string(), json_value()}]
json_string() = binary() | atom()
NOTE: decode/1
always returns binary()
value
json_value() = json_number() | json_string() | json_array() | json_object() | json_boolean() | null
decode/1 | Equivalent to decode(Json, []). |
decode/2 | Decodes an erlang term from json text (a utf8 encoded binary). |
encode/1 | Equivalent to encode(JsonValue, []). |
encode/2 | Encodes an erlang term into json text (a utf8 encoded binary). |
try_decode/1 | Equivalent to try_decode(Json, []). |
try_decode/2 | Decodes an erlang term from json text (a utf8 encoded binary). |
try_encode/1 | Equivalent to try_encode(JsonValue, []). |
try_encode/2 | Encodes an erlang term into json text (a utf8 encoded binary). |
decode(Json::binary()) -> json_value()
Equivalent to decode(Json, [])
.
decode(Json::binary(), Options::[decode_option()]) -> json_value()
Decodes an erlang term from json text (a utf8 encoded binary)
Raises an error exception if input is not valid json
> jsone:decode(<<"1">>, []).
1
> jsone:decode(<<"wrong json">>, []).
** exception error: bad argument
in function jsone_decode:number_integer_part/4
called as jsone_decode:number_integer_part(<<"wrong json">>,1,[],<<>>)
in call from jsone:decode/1 (src/jsone.erl, line 71)
encode(JsonValue::json_value()) -> binary()
Equivalent to encode(JsonValue, [])
.
encode(JsonValue::json_value(), Options::[encode_option()]) -> binary()
Encodes an erlang term into json text (a utf8 encoded binary)
Raises an error exception if input is not an instance of type json_value()
> jsone:encode([1, null, 2]).
<<"[1,null,2]">>
> jsone:encode([1, hoge, 2]). % 'hoge' atom is not a json value
** exception error: bad argument
in function jsone_encode:value/3
called as jsone_encode:value(hoge,[{array_values,[2]}],<<"[1,">>)
in call from jsone:encode/1 (src/jsone.erl, line 97)
try_decode(Json::binary()) -> {ok, json_value(), Remainings::binary()} | {error, {Reason::term(), [erlang:stack_item()]}}
Equivalent to try_decode(Json, [])
.
try_decode(Json::binary(), Options::[decode_option()]) -> {ok, json_value(), Remainings::binary()} | {error, {Reason::term(), [erlang:stack_item()]}}
Decodes an erlang term from json text (a utf8 encoded binary)
> jsone:try_decode(<<"[1,2,3] \"next value\"">>, []).
{ok,[1,2,3],<<" \"next value\"">>}
> jsone:try_decode(<<"wrong json">>, []).
{error,{badarg,[{jsone_decode,number_integer_part,
[<<"wrong json">>,1,[],<<>>],
[{line,208}]}]}}
try_encode(JsonValue::json_value()) -> {ok, binary()} | {error, {Reason::term(), [erlang:stack_item()]}}
Equivalent to try_encode(JsonValue, [])
.
try_encode(JsonValue::json_value(), Options::[encode_option()]) -> {ok, binary()} | {error, {Reason::term(), [erlang:stack_item()]}}
Encodes an erlang term into json text (a utf8 encoded binary)
> jsone:try_encode([1, null, 2]).
{ok,<<"[1,null,2]">>}
> jsone:try_encode([1, hoge, 2]). % 'hoge' atom is not a json value
{error,{badarg,[{jsone_encode,value,
[hoge,[{array_values,[2]}],<<"[1,">>],
[{line,86}]}]}}