Эликсир декодирует список JSON в структуру
Я использую Elixir для извлечения json из внешнего API и сохранения его в базе данных 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? Кто-нибудь сталкивался с такой проблемой раньше?
Любое руководство будет оценено!
1 ответ
Спасибо, Догберт. Я добавил поле типа {: массив,: строка} для элемента "интересов" json в Person Ecto.schema. Я успешно загрузил структуру из json, используя Poison!
defmodule Person do
use Ecto.Schema
schema "person" do
fields :name, :string
embeds_one :address, Address
fields :interests, {:array, :string}
end
end