如何在发送json响应的同时避免phoenix中的json解码?
问题描述:
例如,我有一个返回json的API客户端(作为字符串,未解码)。目前,我必须做这样的事情如何在发送json响应的同时避免phoenix中的json解码?
def show(conn, params) do
{:ok, json} = ApiClient.fetch(params["options"])
json conn, Poison.decode!(json)
end
如果我避免Poison.decode
那么响应将是一个巨大的字符串,而不是JSON。不知何故,我可以省略Poison.decode
吗?它对我来说看起来是一种过度的行为。
注:我在凤凰1.3.0
答
的json/2功能可以发送任何可序列化的数据结构JSON(包括字符串)。
您的APIClient.fetch函数不是JSON解码响应,但是如果字符串已经是JSON,则不需要对其进行解码。您可以直接使用send_resp/3发送:
send_resp(conn, 200, json)
您可能还需要使用put_resp_content_type/3设置内容类型:
conn
|> put_resp_content_type("application/json")
|> send_resp(200, json)
由于json/2
功能对数据进行编码为JSON,假设JSON字符串:
"{\"hello\":\"world\"}"
你会编码它两次,产生:
"\"{\\\"hello\\\":\\\"world\\\"}\""
感谢您的回答,但是您从哪里得到'send_resp/4'函数?我无法在文档中找到它。 –
并且'put_resp_content_type'也不存在。我在凤凰城1.3.0 –
这些来自插件https://hexdocs.pm/plug/Plug.Conn.html#put_resp_content_type/3 - 我已经添加了链接到我的答案。 – Gazler