2017-09-27 1 views
1

たとえば、json(文字列でデコードされない)を返すAPIクライアントがあります。現在、私はPoison.decodeを避ける場合は、応答ではなく、JSONの巨大な文字列になります。このjson応答を送信している間、phoenixでjsonのデコードを避けるにはどうすればいいですか?

def show(conn, params) do 
    {:ok, json} = ApiClient.fetch(params["options"]) 

    json conn, Poison.decode!(json) 
end 

ような何かをしなければなりません。どういうわけかPoison.decodeを省略できますか?それは私にとって過度の行動に見えます。

注:私はjson/2関数は(文字列を含む)JSONとして任意のシリアル化可能なデータ構造を送信することができますフェニックスの1.3.0

答えて

3

です。

APIClient.fetch関数はレスポンスをデコードするJSONではありませんが、文字列がすでにJSONの場合、デコードする必要はありません。

send_resp(conn, 200, json) 

ます。またput_resp_content_type/3を使用して、コンテンツタイプを設定する必要があります:json/2関数は、JSON文字列を想定し、JSONなどのデータを符号化しているので

conn 
|> put_resp_content_type("application/json") 
|> send_resp(200, json) 

を:あなたは直接send_resp/3を使用してそれを送ることができます

"{\"hello\":\"world\"}" 

あなたは、その結果、二度それをコードすることになります。

"\"{\\\"hello\\\":\\\"world\\\"}\"" 
+0

答えてくれてありがとうございます。しかし、あなたは 'send_resp/4'関数をどこで手に入れましたか?私はドキュメントでそれを見つけることができません。 –

+0

また、 'put_resp_content_type'もありません。私はフェニックスにいる1.3.0 –

+0

これらはプラグhttps://hexdocs.pm/plug/Plug.Conn.html#put_resp_content_type/3から来た - 私は私の答えにリンクを追加しました。 – Gazler

関連する問題