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中的某些代码来使用相同的逻辑.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...