, :
-module(to_maps).
-export([to_maps/1]).
to_maps({L}) when is_list(L) ->
maps:from_list([{K, to_maps(V)} || {K, V} <- L]);
to_maps([H|T]) ->
[to_maps(H) | to_maps(T)];
to_maps(X) -> X.
Edit
:
from_maps(
F = fun(K, V, Acc) -> [{K, from_maps(V)} | Acc] end,
{maps:fold(F, [], M)};
from_maps([H|T]) ->
[from_maps(H) | from_maps(T)];
from_maps(X) -> X.
, :
convert({L}) when is_list(L) ->
maps:from_list([{K, convert(V)} || {K, V} <- L]);
convert(
F = fun(K, V, Acc) -> [{K, convert(V)} | Acc] end,
{maps:fold(F, [], M)};
convert([H|T]) ->
[convert(H) | convert(T)];
convert(X) -> X.
:
1> jiffy:decode(<<"{\"foo\":[3, {\"a\":1}], \"bar\":\"baz\"}">>).
{[{<<"foo">>,[3,{[{<<"a">>,1}]}]},{<<"bar">>,<<"baz">>}]}
2> to_maps:to_maps(v(-1)).
#{<<"bar">> => <<"baz">>,<<"foo">> => [3,#{<<"a">> => 1}]}
3> to_maps:from_maps(v(-1)).
{[{<<"foo">>,[3,{[{<<"a">>,1}]}]},{<<"bar">>,<<"baz">>}]}
4> to_maps:convert(v(-1)).
#{<<"bar">> => <<"baz">>,<<"foo">> => [3,#{<<"a">> => 1}]}
5> to_maps:convert(v(-1)).
{[{<<"foo">>,[3,{[{<<"a">>,1}]}]},{<<"bar">>,<<"baz">>}]}
6> to_maps:convert(v(-1)).
#{<<"bar">> => <<"baz">>,<<"foo">> => [3,#{<<"a">> => 1}]}
...