我的 Rails 应用程序中有一个 JSON 数组,使用 Active Model Serializer 以这种格式:
[
{
"contact" : {}
},
{
"contact" : {}
}
]
如何做到这一点,以便我删除联系人上方的一级节点使用活动模型序列化程序,如下所示:
[
{
},
{
}
]
我还想删除节点名称“联系人”。
我的 Rails 应用程序中有一个 JSON 数组,使用 Active Model Serializer 以这种格式:
[
{
"contact" : {}
},
{
"contact" : {}
}
]
如何做到这一点,以便我删除联系人上方的一级节点使用活动模型序列化程序,如下所示:
[
{
},
{
}
]
我还想删除节点名称“联系人”。
这在RailsCast #409 Active Model Serializers中有介绍。
为了删除根节点,您可以在控制器中添加root: false
对的调用。render
假设您contact
在 JSON 中的 s 来自一个contacts#index
方法,您的代码可能类似于:
def index
@contacts = Contacts.all
respond_to do |format|
format.html
format.json { render json: @contacts, root: false }
end
end
或者,如果您不想要任何 JSON 中的任何根节点,请在 中ApplicationController
添加以下方法:
def default_serializer_options
{root: false}
end
对于使用 ActiveModel::Serializer v0.10.x 的人,您需要创建一个初始化程序并包括以下内容:
# config/initializers/serializer.rb
ActiveModelSerializers.config.adapter = :json
ActiveModelSerializers.config.json_include_toplevel_object = true
然后,只需重新启动您的应用程序,您应该会获得所需的根对象。
这适用于 Rails 5.1.x。YMMV。HTH。
如果我没记错的话,通常根节点默认具有您的控制器的名称。
format.json { render json: @contacts}
当然你需要删除root false,它会删除节点的名称。
如果您希望联系人作为根对象,请使用以下命令:
format.json { render json :@contacts, :root => 'contact' }
/config/initializers/serializer.rb
ActiveModelSerializers.config.adapter = :json_api # Default: `:attributes`
默认情况下,ActiveModelSerializers 将使用属性适配器(无 JSON 根)。但我们强烈建议您使用 JsonApi Adapter,它遵循jsonapi.org/format 中指定的格式的1.0。