【问题标题】:Elixir Decode JSON List into StructElixir 将 JSON 列表解码为结构体
【发布时间】:2016-10-09 12:50:51
【问题描述】:

我正在使用 Elixir 从外部 API 检索 json 并将其存储在 Postgresql 数据库中。我正在使用 Poison 将 json 解码为 Elixir Ecto (2.0) 模式。它运行良好,除了一个方面:json 的一个元素是一个没有任何键的 List。我不知道如何将此元素映射到 Elixir 结构。

json:

{"name": "Joe Random"
 "address": {
   "street": "123 Main St",
   "city": "Smalltown"
   },
 "interests": [
   "Biking",
   "Movies"
   ]
}

此 json 采用结构(人)的形式,其中包含嵌入式结构(地址)和嵌入式列表(兴趣)。我想用 Ecto.Schemas 对这个结构进行建模,以便将 json 加载到其中。人和地址结构很简单:

defmodule Person do
  use Ecto.Schema

  schema "person" do
    field :name, :string
    embeds_one :address, Address
  end
end

defmodule Address do
  use Ecto.Schema

  embedded_schema do
    field :street, :string
    field :city, :string
  end
end

我可以使用 Poison.decode 来加载这些结构:

Poison.decode!(json, as person: %Person{address: %Address{}})

但是,我如何建模和存储“兴趣”:来自 json?它只是一个没有任何键的简单单值列表。我可以把它变成一张地图,然后我可以用 Ecto.Schema 建模吗?有没有人遇到过这样的问题?

任何指导将不胜感激!

【问题讨论】:

  • 我想你想要field :interests, {:array, :string} in Person

标签: json struct elixir ecto elixir-poison


【解决方案1】:

谢谢你,多格伯特。我为 Person Ecto.schema 的 json 的“interests”元素添加了一个 {:array, :string} 类型的字段。我使用 Poison 成功地从 json 加载了结构!

defmodule Person do
  use Ecto.Schema

  schema "person" do
    fields :name, :string
    embeds_one :address, Address
    fields :interests, {:array, :string}
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多