Я использую couchbeam для связи с CouchDB из Elixir.
Но библиотека возвращает мне старое представление объекта erlang, такое как {[{"foo", "bar"}]}
, а не карты эликсира, это было связано с тем, что библиотека использовала jiffy:decode без return_maps
. Как мне преобразовать эту структуру объекта в карты Elixir (и наоборот)?
Я нашел хакерский способ jiffy:encode и jiffy:decode снова с помощью return_maps
... Но должна ли быть другая альтернатива?
Обновлять:
Из примера Хайнека в erlang, похоже, это работает:
defmodule ToMaps do
def convert({x}) when is_list(x) do
Map.new(x, fn {k, v} -> {k, convert(v)} end)
end
def convert([head | tail]) do
[convert(head) | convert(tail)]
end
def convert(x) do
x
end
end
Кажется, делает работу.
iex(1)> ToMaps.convert({[{"foo",[{[{"a",1}]},3]},{"bar","baz"}]})
%{"bar" => "baz", "foo" => [%{"a" => 1}, 3]}