diff --git a/src/emqx_json.erl b/src/emqx_json.erl index 563909e2c..c81c9b06b 100644 --- a/src/emqx_json.erl +++ b/src/emqx_json.erl @@ -103,6 +103,8 @@ safe_decode(Json, Opts) -> , from_ejson/1 ]}). +to_ejson([[{_,_}]|_] = L) -> + [to_ejson(E) || E <- L]; to_ejson([{_, _}|_] = L) -> lists:foldl( fun({Name, Value}, Acc) -> @@ -110,6 +112,8 @@ to_ejson([{_, _}|_] = L) -> end, #{}, L); to_ejson(T) -> T. +from_ejson([{_}|_] = L) -> + [from_ejson(E) || E <- L]; from_ejson({L}) -> [{Name, from_ejson(Value)} || {Name, Value} <- L]; from_ejson(T) -> T. diff --git a/test/emqx_json_SUITE.erl b/test/emqx_json_SUITE.erl index d0adf0650..434180cb9 100644 --- a/test/emqx_json_SUITE.erl +++ b/test/emqx_json_SUITE.erl @@ -67,6 +67,7 @@ t_decode_encode(_) -> [{<<"foo">>, <<"bar">>}] = decode(encode({[{foo, bar}]})), [{<<"foo">>, <<"bar">>}] = decode(encode({[{<<"foo">>, <<"bar">>}]})), [{<<"foo">>, <<"bar">>}] = decode(encode([{<<"foo">>, <<"bar">>}])), + [[{<<"foo">>, <<"bar">>}]] = decode(encode([[{<<"foo">>, <<"bar">>}]])), #{<<"foo">> := <<"bar">>} = decode(encode(#{<<"foo">> => <<"bar">>}), [return_maps]), JsonText = <<"{\"bool\":true,\"int\":10,\"foo\":\"bar\"}">>, JsonMaps = #{<<"bool">> => true,