【问题标题】:Why does phoenix controller returns a json which can't be recognized as JSON为什么凤凰控制器返回一个无法识别为JSON的json
【发布时间】:2016-04-20 22:02:07
【问题描述】:

我正在尝试用新的 phoenix 替换旧的 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

【问题讨论】:

    标签: elixir phoenix-framework elixir-poison


    【解决方案1】:

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

    您的代码应该是:

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

    【讨论】:

    • 谢谢!这对我帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多