【问题标题】:Elixir Phoenix Parse JSON as StructElixir Phoenix 将 JSON 解析为结构
【发布时间】:2019-12-13 18:28:17
【问题描述】:

基于this answer,我知道如何使用Poison.decode/2将JSON解析为结构:

defmodule User do
  @derive [Poison.Encoder]
  defstruct [:address]
end

defmodule Address do
  @derive [Poison.Encoder]
  defstruct [:street]
end

Poison.decode(response, as: %User{address: %Address{}})

但是我如何告诉菲尼克斯也这样做呢?如果我告诉它我的端点接受 JSON,它会自动将其解析为地图:

defmodule MyAppWeb.Router do
  use MyAppWeb, :router

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/api/v1", MyAppWeb do
    pipe_through :api

    put "/endpoint", MyController, :put
  end
end

defmodule MyController do
  def put(conn, %{"_json" => map}) do
    # Here, `map` is already parsed as a map. How can I tell Phoenix to
    # parse it as a struct I choose like I can tell `Poison` to do so?
  end
end

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    在您的endpoint.ex 中,您应该有parsers 插头:

     plug Plug.Parsers,
        parsers: [:urlencoded, :multipart, :json],
        pass: ["*/*"],
        json_decoder: Poison
    

    删除 json 原子,这应该禁用 json 解析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      相关资源
      最近更新 更多