我正在使用couchbeam从 Elixir 联系 CouchDB。
但是 lib 给了我旧的 erlang 对象表示,比如{[{"foo", "bar"}]}
而不是 elixir 映射,这是由于 lib 使用 jiffy:decode without return_maps
,我如何将此对象结构转换为 Elixir 映射(反之亦然)?
我找到了一个 hackish 方法来 jiffy:encode 和 jiffy:decode 它再次return_maps
... 但是必须有另一种选择?
更新:
从 Hynek 在 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]}