例如,我有一个返回json的API客户端(作为字符串,未解码)。目前,我必须做这样的事情
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
答案 0 :(得分:3)
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\\\"}\""