Elixir将struct转换为map

use*_*502 26 struct dictionary elixir telegram-bot

我正在尝试将结构转换为地图,以便能够清除所有的nil值

我目前正在使用此代码

  case Nadia.get_updates  do
    {:ok, results} ->
      Map.from_struct(results)
      |> Enum.filter(fn {_, v} -> v != nil end)
      |> Enum.into(%{})
Run Code Online (Sandbox Code Playgroud)

注意:Nadia.get_updates返回以下结构:https://hexdocs.pm/nadia/Nadia.Model.Update.html#t:t / 0

然而,我总是收到以下错误:Map.from_struct/1中没有匹配的函数子句

Jul*_*ano 52

v0.15开始,我们就是Map.from_struct/1这样做的.

defmodule User do
  defstruct [:name]
end

Map.from_struct(%User{name: "valim"})
#=> %{name: "valim"}
Run Code Online (Sandbox Code Playgroud)

  • 哈哈!从我以前来过的upvote判断...也许我应该得到一个纹身:) (3认同)

rad*_*erg 11

还有另一招

my_struct = %MyStruct{}
my_map = Map.delete my_struct, :__struct__
Run Code Online (Sandbox Code Playgroud)


Sas*_*eca 2

get_updates([{atom, any}]) ::
  {:ok, [Nadia.Model.Update.t]} |
  {:error, Nadia.Model.Error.t}
Run Code Online (Sandbox Code Playgroud)

如果成功,它将返回 Nadia.Model.Update.t 列表。这就是您收到该错误的原因。