2016-07-09 5 views

答えて

12

Phoenix.Controller.json/2は、現在、JSONエンコーダに渡すことのできるオプションを受け付けていません。

すべてのjson呼び出しでpretty JSONが出力されるようにする場合は、Poisonのラッパーを作成してPhoenixに使用させることができます。

lib/my_app/pretty_poison_encoder_for_phoenix.exでは、追加:

defmodule MyApp.PrettyPoisonEncoderForPhoenix do 
    def encode_to_iodata!(data) do 
    Poison.encode_to_iodata!(data, pretty: true) 
    end 
end 

そしてconfig/config.exs

は、追加:

config :phoenix, :format_encoders, json: MyApp.PrettyPoisonEncoderForPhoenix 

サーバーを再起動した後、すべてのあなたのjsonのコールは自動的にきれいなJSONを印刷する必要があります。

devに出力したい場合は、上記のコードをconfig/dev.exsに追加してください。それを行うと、prodはまだきれいでないJSONを出力します。


またPhoenix.Controller.json/2が何を行い、簡単なラッパーを作成することができます(ほとんど、下記の注を参照)だけでなく、かなりの出力を行います

def pretty_json(conn, data) do 
    conn 
    |> put_resp_header("content-type", "application/json; charset=utf-8") 
    |> send_resp(200, Poison.encode!(data, pretty: true)) 
end 

使用法:

def index(conn, _params) do 
    pretty_json conn, [%{a: 1, b: 2}, %{c: 3, d: 4}] 
end 

出力を:

➜ curl localhost:4000 
[ 
    { 
    "b": 2, 
    "a": 1 
    }, 
    { 
    "d": 4, 
    "c": 3 
    } 
] 

注:コンテンツタイプが存在しない場合は、コンテンツタイプを追加するだけであるため、これは正確にPhoenix.Controller.json/2に相当しません。 hereからいくつかのコードをコピーして、同じロジックを使用することができます。

関連する問題