diff --git a/src/jsx.erl b/src/jsx.erl index 993303e..663030c 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -282,10 +282,10 @@ multi_test_result() -> [{literal, false}], [{literal, null}], [start_object, end_object], - [start_object, {key, <<"key">>}, {string, <<"value">>}, end_object], + [start_object, {key, "key"}, {string, "value"}, end_object], [start_array, end_array], [start_array, {integer, 1}, {integer, 2}, {integer, 3}, end_array], - [{string, <<"hope this works">>}] + [{string, "hope this works"}] ]. diff --git a/src/jsx_common.hrl b/src/jsx_common.hrl index 541762d..daf23f3 100644 --- a/src/jsx_common.hrl +++ b/src/jsx_common.hrl @@ -43,15 +43,15 @@ | utf32 | {utf32, little} }. - + -type jsx_event() :: start_object | end_object | start_array | end_array | end_json - | {key, binary()} - | {string, binary()} + | {key, list()} + | {string, list()} | {integer, integer()} | {float, float()} | {literal, true} diff --git a/src/jsx_decoder.hrl b/src/jsx_decoder.hrl index 3e2cf09..bf5e969 100644 --- a/src/jsx_decoder.hrl +++ b/src/jsx_decoder.hrl @@ -357,11 +357,11 @@ key(Bin, Stack, Opts) -> string(Bin, Stack, Opts) -> string(Bin, Stack, Opts, []). string(<>, [key|_] = Stack, Opts, Acc) -> - {jsx, {key, unicode:characters_to_binary(lists:reverse(Acc))}, fun() -> + {jsx, {key, lists:reverse(Acc)}, fun() -> colon(Rest, Stack, Opts) end}; string(<>, Stack, Opts, Acc) -> - {jsx, {string, unicode:characters_to_binary(lists:reverse(Acc))}, fun() -> + {jsx, {string, lists:reverse(Acc)}, fun() -> maybe_done(Rest, Stack, Opts) end}; string(<>, Stack, Opts, Acc) -> @@ -1228,7 +1228,7 @@ check_bad(List) -> ). check_replaced(List) -> - lists:dropwhile(fun({_, [{string, <<16#fffd/utf8>>}|_]}) -> + lists:dropwhile(fun({_, [{string, [16#fffd]}|_]}) -> true ; (_) -> false diff --git a/src/jsx_terms.erl b/src/jsx_terms.erl index c2c9605..3d61312 100644 --- a/src/jsx_terms.erl +++ b/src/jsx_terms.erl @@ -163,8 +163,8 @@ collect(_, _, _) -> erlang:error(badarg). %% helper functions for converting jsx events to term format -event({string, String}, _Opts) -> String; -event({key, Key}, _Opts) -> Key; +event({string, String}, _Opts) -> unicode:characters_to_binary(String); +event({key, Key}, _Opts) -> unicode:characters_to_binary(Key); event({integer, Integer}, _Opts) -> Integer; event({float, Float}, _Opts) -> Float; event({literal, Literal}, _Opts) -> Literal. diff --git a/test/cases/array.test b/test/cases/array.test index 7150207..f1c235f 100644 --- a/test/cases/array.test +++ b/test/cases/array.test @@ -1,8 +1,8 @@ {name, "array"}. {jsx, [start_array, - {string,<<"foo">>}, - {string,<<"bar">>}, - {string,<<"baz">>}, + {string,"foo"}, + {string,"bar"}, + {string,"baz"}, start_array, {literal,true}, end_array,start_array, @@ -15,14 +15,14 @@ {literal,null}, {float,0.7}, start_object, - {key,<<"key">>}, - {string,<<"value">>}, + {key,"key"}, + {string,"value"}, end_object,start_array,start_object,end_object, {literal,null}, {literal,null}, {literal,null}, start_array,end_array,end_array, - {string,<<"\n\r\\">>}, + {string,"\n\r\\"}, start_array, {integer,-1}, end_array,end_array,end_json]}. diff --git a/test/cases/encoded_surrogates.test b/test/cases/encoded_surrogates.test index aa5d317..d65c5c0 100644 --- a/test/cases/encoded_surrogates.test +++ b/test/cases/encoded_surrogates.test @@ -1,3 +1,3 @@ {name, "encoded_surrogates"}. -{jsx, [start_array,{string,<<66560/utf8>>},end_array,end_json]}. +{jsx, [start_array,{string,66560]},end_array,end_json]}. {json, "encoded_surrogates.json"}. diff --git a/test/cases/escaped_noncharacter_ext_replaced.test b/test/cases/escaped_noncharacter_ext_replaced.test index 0a740b6..413116e 100644 --- a/test/cases/escaped_noncharacter_ext_replaced.test +++ b/test/cases/escaped_noncharacter_ext_replaced.test @@ -1,4 +1,4 @@ {name, "escaped noncharacter (extended)"}. -{jsx, [{string, <<16#fffd/utf8>>}, end_json]}. +{jsx, [{string, [16#fffd]}, end_json]}. {json, "escaped_noncharacter_ext.json"}. {jsx_flags, [loose_unicode]}. \ No newline at end of file diff --git a/test/cases/escaped_noncharacter_replaced.test b/test/cases/escaped_noncharacter_replaced.test index 9c5faac..1cb374e 100644 --- a/test/cases/escaped_noncharacter_replaced.test +++ b/test/cases/escaped_noncharacter_replaced.test @@ -1,4 +1,4 @@ {name, "escaped noncharacter replacement"}. -{jsx, [{string,<<16#fffd/utf8>>},end_json]}. +{jsx, [{string,[16#fffd]},end_json]}. {json, "escaped_noncharacter_replaced.json"}. {jsx_flags, [loose_unicode]}. \ No newline at end of file diff --git a/test/cases/escaped_nullbyte_replaced.test b/test/cases/escaped_nullbyte_replaced.test index 785acc8..289bb01 100644 --- a/test/cases/escaped_nullbyte_replaced.test +++ b/test/cases/escaped_nullbyte_replaced.test @@ -1,4 +1,4 @@ {name, "escaped nullbyte replaced"}. -{jsx, [{string,<<16#fffd/utf8>>},end_json]}. +{jsx, [{string,[16#fffd]},end_json]}. {json, "escaped_nullbyte_replaced.json"}. {jsx_flags, [loose_unicode]}. \ No newline at end of file diff --git a/test/cases/exp.test b/test/cases/exp.test index c4b9bd4..02d4416 100644 --- a/test/cases/exp.test +++ b/test/cases/exp.test @@ -4,9 +4,9 @@ end_array, {float,2.0e7}, start_object, - {key,<<"key">>}, + {key,"key"}, {float,2.0e7}, - {key,<<"another key">>}, + {key,"another key"}, {float,2.0e7}, end_object, {float,4.2e70}, diff --git a/test/cases/fraction.test b/test/cases/fraction.test index 7cfdcf2..1b0d791 100644 --- a/test/cases/fraction.test +++ b/test/cases/fraction.test @@ -4,14 +4,14 @@ end_array, {float,2.0}, start_object, - {key,<<"key">>}, + {key,"key"}, {float,2.0e7}, - {key,<<"another key">>}, + {key,"another key"}, {float,2.0e7}, end_object,start_object, - {key,<<"key">>}, + {key,"key"}, {float,2.0}, - {key,<<"another key">>}, + {key,"another key"}, {float,2.0}, end_object, {float,4.321}, diff --git a/test/cases/integer.test b/test/cases/integer.test index 0883c33..2f2eee9 100644 --- a/test/cases/integer.test +++ b/test/cases/integer.test @@ -4,9 +4,9 @@ end_array, {integer,20}, start_object, - {key,<<"key">>}, + {key,"key"}, {integer,20}, - {key,<<"another key">>}, + {key,"another key"}, {integer,20}, end_object, {integer,42}, diff --git a/test/cases/multibyte_utf.test b/test/cases/multibyte_utf.test index cb8be9c..6a9217e 100644 --- a/test/cases/multibyte_utf.test +++ b/test/cases/multibyte_utf.test @@ -1,3 +1,3 @@ {name, "multibyte_utf"}. -{jsx, [start_array,{string,<<32,119070/utf8,32>>},end_array,end_json]}. +{jsx, [start_array,{string,[32,119070,32]},end_array,end_json]}. {json, "multibyte_utf.json"}. diff --git a/test/cases/naked_string.test b/test/cases/naked_string.test index 68fe34b..3ce5c36 100644 --- a/test/cases/naked_string.test +++ b/test/cases/naked_string.test @@ -1,3 +1,3 @@ {name, "naked_string"}. -{jsx, [{string,<<"this is a naked string">>},end_json]}. +{jsx, [{string,"this is a naked string"},end_json]}. {json, "naked_string.json"}. diff --git a/test/cases/negative_zero.test b/test/cases/negative_zero.test index 0bc734a..0ef4f1a 100644 --- a/test/cases/negative_zero.test +++ b/test/cases/negative_zero.test @@ -4,9 +4,9 @@ end_array, {integer,0}, start_object, - {key,<<"key">>}, + {key,"key"}, {integer,0}, - {key,<<"another key">>}, + {key,"another key"}, {integer,0}, end_object, {integer,0}, diff --git a/test/cases/noncharacter_replaced.test b/test/cases/noncharacter_replaced.test index 0944886..2718106 100644 --- a/test/cases/noncharacter_replaced.test +++ b/test/cases/noncharacter_replaced.test @@ -1,4 +1,4 @@ {name, "noncharacter replaced"}. -{jsx, [{string,<<16#fffd/utf8>>},end_json]}. +{jsx, [{string,[16#fffd/utf8]},end_json]}. {json, "noncharacter_replaced.json"}. {jsx_flags, [loose_unicode]}. \ No newline at end of file diff --git a/test/cases/nullbyte_replaced.test b/test/cases/nullbyte_replaced.test index 9a909eb..9a3ab0f 100644 --- a/test/cases/nullbyte_replaced.test +++ b/test/cases/nullbyte_replaced.test @@ -1,4 +1,4 @@ {name, "nullbyte replaced"}. -{jsx, [{string,<<16#fffd/utf8>>},end_json]}. +{jsx, [{string,[16#fffd]},end_json]}. {json, "nullbyte_replaced.json"}. {jsx_flags, [loose_unicode]}. \ No newline at end of file diff --git a/test/cases/object.test b/test/cases/object.test index 4877fc8..b9b50d4 100644 --- a/test/cases/object.test +++ b/test/cases/object.test @@ -1,22 +1,22 @@ {name, "object"}. {jsx, [start_object, - {key,<<"foo">>}, - {string,<<"bar">>}, - {key,<<"baz">>}, + {key,"foo"}, + {string,"bar"}, + {key,"baz"}, {literal,true}, - {key,<<"false">>}, + {key,"false"}, {literal,null}, - {key,<<"object">>}, + {key,"object"}, start_object, - {key,<<"key">>}, - {string,<<"value">>}, + {key,"key"}, + {string,"value"}, end_object, - {key,<<"list">>}, + {key,"list"}, start_array, {literal,null}, {literal,null}, {literal,null}, start_array,end_array, - {string,<<"\n\r\\">>}, + {string,"\n\r\\"}, end_array,end_object,end_json]}. {json, "object.json"}. diff --git a/test/cases/string.test b/test/cases/string.test index e1334d3..8df9aa5 100644 --- a/test/cases/string.test +++ b/test/cases/string.test @@ -1,5 +1,5 @@ {name, "string"}. {jsx, [start_array, - {string,<<"this is a random string with \n embedded escapes in it">>}, + {string,"this is a random string with \n embedded escapes in it"}, end_array,end_json]}. {json, "string.json"}. diff --git a/test/cases/string_escapes.test b/test/cases/string_escapes.test index 7cd460c..e33a903 100644 --- a/test/cases/string_escapes.test +++ b/test/cases/string_escapes.test @@ -1,12 +1,12 @@ {name, "string_escapes"}. {jsx, [start_array, - {string,<<"\"">>}, - {string,<<"\\">>}, - {string,<<"/">>}, - {string,<<"\b">>}, - {string,<<"\f">>}, - {string,<<"\n">>}, - {string,<<"\r">>}, - {string,<<"\t">>}, + {string,"\""}, + {string,"\\"}, + {string,"/"}, + {string,"\b"}, + {string,"\f"}, + {string,"\n"}, + {string,"\r"}, + {string,"\t"}, end_array,end_json]}. {json, "string_escapes.json"}. diff --git a/test/cases/unicode_to_codepoint.test b/test/cases/unicode_to_codepoint.test index 71f47fd..587220c 100644 --- a/test/cases/unicode_to_codepoint.test +++ b/test/cases/unicode_to_codepoint.test @@ -1,6 +1,6 @@ {name, "unicode_to_codepoint"}. {jsx, [start_array, - {string,<<"arabic letter alef: ">>}, - {string,<<1575/utf8>>}, + {string,"arabic letter alef: "}, + {string,[1575]}, end_array,end_json]}. {json, "unicode_to_codepoint.json"}. diff --git a/test/cases/unpaired_surrogate_replaced.test b/test/cases/unpaired_surrogate_replaced.test index 7269bc2..531fc69 100644 --- a/test/cases/unpaired_surrogate_replaced.test +++ b/test/cases/unpaired_surrogate_replaced.test @@ -1,4 +1,4 @@ {name, "unpaired surrogate replaced"}. -{jsx, [start_array,{string,<<16#fffd/utf8, "blah">>},end_array,end_json]}. +{jsx, [start_array,{string,16#fffd/utf8 ++ "blah"},end_array,end_json]}. {json, "unpaired_surrogate_replaced.json"}. {jsx_flags, [loose_unicode]}. diff --git a/test/cases/zero.test b/test/cases/zero.test index 9515a85..cd072a1 100644 --- a/test/cases/zero.test +++ b/test/cases/zero.test @@ -4,9 +4,9 @@ end_array, {integer,0}, start_object, - {key,<<"key">>}, + {key,"key"}, {integer,0}, - {key,<<"another key">>}, + {key,"another key"}, {integer,0}, end_object, {integer,0},