使用Ecto.changeset schemaless验证嵌套的json

时间:2018-05-14 00:50:19

标签: elixir phoenix-framework

我已经开始用Elixir和Phoenix编写一个应用程序,但我有点失落。

基本上,应用程序将收到一个复杂的JSON,我需要对其进行验证并将其保存在数据库中。

这样的事情:

我的json:

{
    "id": 42,
    "name": "Alan",
    "address": {
        "universe": "C-137"
    }
}

我的表

| id | person_id | data                     |
| #  | 42        | {"id": 42,"name": "Al... |

问题是我不知道如何验证JSON。

我正在寻找变更集,但我不知道如何使用它来验证嵌套对象的JSON。

我想做这样的事情:

defmodule Foo.Person do
  import Ecto.Changeset

  def types("person") do
    %{id: :integer, name: :string, address: types("address")}
  end

  def types("address") do
    %{universe: :string}
  end

  def changeset(data) do
    {data, types("person")}
    |> cast(data, Map.keys(types("person")))
    # |> other validation rules ...
  end
end

我只使用 Schema 实现此目标,但我不想在我的数据库中单独保存JSON的每个部分。

有人知道是否有一些技巧可以做到吗?

0 个答案:

没有答案