微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/js/158715.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐