Эликсир декодирует список 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
Другие вопросы по тегам