Я использую Elixir для получения json из внешнего API и сохранения его в базе данных 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? Это простой однозначный список без каких-либо ключей. Могу ли я превратить его в карту, которую затем смогу смоделировать с помощью Ecto.Schema? Кто-нибудь сталкивался с подобной проблемой раньше?
Любое руководство будет оценено!
field :interests, {:array, :string}
вPerson
? - person Dogbert   schedule 09.06.2016