Elixir 将 JSON 列表解码为结构
Elixir Decode JSON List into Struct
我正在使用 Elixir 从外部 API 检索 json 并将其存储在 Postgresql 数据库中。我正在使用 Poison 将 json 解码为 Elixir Ecto (2.0) 模式。除了一个方面,它运行良好:json 的一个元素是一个没有任何键的列表。我不知道如何将此元素映射到 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 建模和存储 "interests":?它只是一个没有任何键的简单单值列表。我可以把它变成一张地图,然后用 Ecto.Schema 建模吗?以前有人遇到过这样的问题吗?
任何指导将不胜感激!
谢谢你,狗伯特。我为 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
我正在使用 Elixir 从外部 API 检索 json 并将其存储在 Postgresql 数据库中。我正在使用 Poison 将 json 解码为 Elixir Ecto (2.0) 模式。除了一个方面,它运行良好:json 的一个元素是一个没有任何键的列表。我不知道如何将此元素映射到 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 建模和存储 "interests":?它只是一个没有任何键的简单单值列表。我可以把它变成一张地图,然后用 Ecto.Schema 建模吗?以前有人遇到过这样的问题吗?
任何指导将不胜感激!
谢谢你,狗伯特。我为 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