渲染JSON:删除空字段

时间:2019-02-22 12:03:21

标签: ruby-on-rails json

Ruby-on-Rails API渲染JSON时,我需要避免具有空字段:

def index
  @items = Item.all
  render json: @items,
end

如果我的Item对象包含nil个字段,则它们在JSON中被序列化为null。我只想从JSON中消除空字段。

为此可以选择render吗?

编辑:示例输出

[{
    "id": 2,
    "code": "code",
    "list_id": 1,
    "created_by": "me",
    "comment": null
}]

编辑:重复this post吗?

所提到的帖子的答案不是很通用。我想找到一个适用于任何地方的解决方案,只需在render上使用一个简单的参数即可(例如,假设一些skip_nil_values参数)。这篇文章的答案,也没有提及如何做,也没有提及如何处理返回的JSON中的系统嵌套对象。

我希望避免在API的每个地方都{肿as_json,每次为每个新端点手动重新定义。

作为最后一个论点,提到的帖子是指Rails 3.2。我在Rails 5.2中。这两个版本之间可能会有一些改进。

2 个答案:

答案 0 :(得分:0)

Rails中有一个compact方法,该方法返回具有非nil值的哈希。 您可以使用: @items.map(&:compact)

答案 1 :(得分:0)

在应用程序控制器中创建以下私有方法(随意命名)。

def format_collection obj_col
  obj_col.as_json.each do |obj|
    obj.reject! { |key, value| value.nil? }
  end
end

用以下内容替换渲染行。

render json: format_collection @items