diff --git a/src/jsx.erl b/src/jsx.erl index 62c9d3f..5fe9388 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -33,7 +33,10 @@ decoder() -> decoder([]). decoder(Opts) -> - F = fun(end_of_stream, State) -> lists:reverse(State) ;(Event, State) -> [Event] ++ State end, + F = fun(end_of_json, State) -> lists:reverse(State) + ; (reset, _State) -> [] + ; (Event, State) -> [Event] ++ State + end, decoder({F, []}, Opts). decoder({F, _} = Callbacks, OptsList) when is_list(OptsList), is_function(F) -> @@ -124,24 +127,21 @@ detect_encoding(<> = JSON, Stack, Callbacks, Opts) when X =/ %% the problem detect_encoding(<>, Stack, Callbacks, Opts) when X =/= 0 -> - { - try {Result, _} = jsx_utf8:start(<>, [], Callbacks, Opts), Result + {try {Result, _} = jsx_utf8:start(<>, [], Callbacks, Opts), Result catch error:function_clause -> incomplete end, fun(Stream) -> detect_encoding(<>, Stack, Callbacks, Opts) end }; detect_encoding(<<0, X>>, Stack, Callbacks, Opts) when X =/= 0 -> - { - try {Result, _} = jsx_utf16:start(<<0, X>>, [], Callbacks, Opts), Result + {try {Result, _} = jsx_utf16:start(<<0, X>>, [], Callbacks, Opts), Result catch error:function_clause -> incomplete end, fun(Stream) -> detect_encoding(<<0, X, Stream/binary>>, Stack, Callbacks, Opts) end }; detect_encoding(<>, Stack, Callbacks, Opts) when X =/= 0 -> - { - try {Result, _} = jsx_utf16le:start(<>, [], Callbacks, Opts), Result + {try {Result, _} = jsx_utf16le:start(<>, [], Callbacks, Opts), Result catch error:function_clause -> incomplete end, fun(Stream) -> detect_encoding(<>, Stack, Callbacks, Opts) diff --git a/test/jsx_test.erl b/test/jsx_test.erl index 894686c..e84abf0 100644 --- a/test/jsx_test.erl +++ b/test/jsx_test.erl @@ -41,7 +41,7 @@ test(Dir) -> decoder(Flags) -> jsx:decoder({jsx_test, test_event, []}, Flags). -test_event(end_of_stream, Acc) -> +test_event(end_of_json, Acc) -> lists:reverse(Acc); test_event(Event, Acc) -> [Event] ++ Acc.