为什么phoenix controller returns a json 不能被识别为JSON
Why does phoenix controller returns a json which can't be recognized as JSON
我正在尝试用新的 phoenix 替换旧的 rails 应用程序。我正在发送 ajax 请求,我试图通过 jQuery 自动识别为 JSON。问题是 rails returns 这个内容:
{"user_id":1,"user_avatar_url":"/avatar.png"}
而我的凤凰应用 returns 这个:
"{\"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
您无需在使用 Phoenix.Controller.json/2
时使用 Poison.encode!
手动编码术语,它会为您处理。您的数据现在正在双重编码。
您的代码应该是:
conn
|> put_session(:user_id, user.id)
|> json(user)
我正在尝试用新的 phoenix 替换旧的 rails 应用程序。我正在发送 ajax 请求,我试图通过 jQuery 自动识别为 JSON。问题是 rails returns 这个内容:
{"user_id":1,"user_avatar_url":"/avatar.png"}
而我的凤凰应用 returns 这个:
"{\"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
您无需在使用 Phoenix.Controller.json/2
时使用 Poison.encode!
手动编码术语,它会为您处理。您的数据现在正在双重编码。
您的代码应该是:
conn
|> put_session(:user_id, user.id)
|> json(user)