从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
中。这两个版本之间可能会有一些改进。
答案 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