Browse Source

Merge pull request #55 from Flameeyes/master

Don't try to encode singleton tuples as objects.
Takeru Ohta 4 years ago
parent
commit
5f496f9cf7
2 changed files with 9 additions and 1 deletions
  1. 1 1
      src/jsone_encode.erl
  2. 8 0
      test/jsone_encode_tests.erl

+ 1 - 1
src/jsone_encode.erl

@@ -138,7 +138,7 @@ value(Value, Nexts, Buf, Opt) when is_integer(Value) -> next(Nexts, <<Buf/binary
 value(Value, Nexts, Buf, Opt) when is_float(Value)   -> next(Nexts, <<Buf/binary, (float_to_binary(Value, Opt?OPT.float_format))/binary>>, Opt);
 value(Value, Nexts, Buf, Opt) when ?IS_STR(Value)    -> string(Value, Nexts, Buf, Opt);
 value({{_,_,_},{_,_,_}} = Value, Nexts, Buf, Opt)    -> datetime(Value, Nexts, Buf, Opt);
-value({Value}, Nexts, Buf, Opt)                      -> object(Value, Nexts, Buf, Opt);
+value({Value}, Nexts, Buf, Opt) when is_list(Value)  -> object(Value, Nexts, Buf, Opt);
 value([{}], Nexts, Buf, Opt)                         -> object([], Nexts, Buf, Opt);
 value([{{_,_,_},{_,_,_}}|_] = Value, Nexts, Buf, Opt)-> array(Value, Nexts, Buf, Opt);
 value([{_, _}|_] = Value, Nexts, Buf, Opt)           -> object(Value, Nexts, Buf, Opt);

+ 8 - 0
test/jsone_encode_tests.erl

@@ -308,6 +308,14 @@ encode_test_() ->
               Expected = <<"[\"1.2.3.4\"]">>,
               ?assertEqual(Expected, jsone:encode(Input, [{map_unknown_value, MapFun}]))
       end},
+     {"`map_unknown_value` option with singleton tuple",
+      fun () ->
+              Input = [{foo}],
+              MapFun = fun (Value) -> {ok, unicode:characters_to_binary(io_lib:format("~p~n", [Value]))}
+                       end,
+              Expected = <<"[\"{foo}\\n\"]">>,
+              ?assertEqual(Expected, jsone:encode(Input, [{map_unknown_value, MapFun}]))
+      end},
 
      %% Others
      {"compound data",