elixir – 让Phoenix Controller输出漂亮的JSON

前端之家收集整理的这篇文章主要介绍了elixir – 让Phoenix Controller输出漂亮的JSON前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法让Phoenix.Controller.json(conn,data)输出漂亮的 JSON

解决方法

Phoenix.Controller.json/2当前不接受可以传递给JSON编码器的选项.

如果你想全局地使所有json调用输出非常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中的某些代码来使用相同的逻辑.

原文链接:https://www.f2er.com/js/158715.html

猜你在找的JavaScript相关文章