为什么phoenix控制器返回一个无法识别为JSON的json

时间:2016-04-20 13:51:35

标签: elixir phoenix-framework elixir-poison

我正在尝试用新凤凰替换旧的rails应用程序。我正在发送ajax请求,我试图通过jQuery自动识别为JSON。问题是rails返回了这个内容:

{"user_id":1,"user_avatar_url":"/avatar.png"}

当我的凤凰应用程序返回时:

"{\"id\":1,\"avatar_url\":\"/avatar.png\"}"

所以我需要运行JSON.parse将此内容识别为json对象。我可以做些什么来实现它自动解析?

我的凤凰代码:

# the controller part responsible for rendering
conn
|> put_session(:user_id, user.id)
|> json(Poison.encode!(user))

# poison serializer placed in model
  defimpl Poison.Encoder, for: Harvest.User do
    def encode(user, _options) do
      user
      |> Map.put(:avatar_url, "/avatar.png")
      |> Map.take([:id, :avatar_url])
      |> Poison.encode!([])
    end
  end

1 个答案:

答案 0 :(得分:1)

使用Phoenix.Controller.json/2时,您无需使用Poison.encode!手动编码术语,它会为您处理。您的数据现在正在进行双重编码。

您的代码应该是:

conn
|> put_session(:user_id, user.id)
|> json(user)