[
{
"id":"123",
"name":"House"
},
{
"id":"1456",
"name":"Desperate Housewives"
},
{
"id":"789",
"name":"Dollhouse"
},
{
"id":"10",
"name":"Full House"
}
]
如何渲染以在Ruby中生成此JSON格式?我收集了来自DB(@result)的所有数据,并且不知道在Ruby中使用什么数据结构,当我这样做时将呈现给它:
respond_to do |format|
format.json { render :json => @result}
end
@result应该是什么数据结构,我如何迭代生成它?谢谢!
答案 0 :(得分:6)
如果@result
是ActiveRecord模型实例的数组,那么render :json => @result
将生成类似于您所使用的内容,但将包含模型的所有属性(render
调用{{1你传递它的对象,除非它是一个字符串)。
要仅包含ID和name属性,您可以使用to_json
的to_json
参数:
:only
或者,您可以创建仅包含所需属性的Hash对象数组:
respond_to do |format|
format.json { render :json => @result.to_json(:only => [:id, :name] }
end
编辑:请参阅下面的@ dt评论。名为text的模型中有一个属性需要作为名称输出。这可以通过在模型中为文本创建别名来完成:
respond_to do |format|
format.json { render :json =>
@result.collect {|o| {:id => o.id, :name => o.name} } }
end
并使用class Model < ActiveRecord::Base
alias_method :name, :text
包含名称:
:methods
或者,哈希方法数组可用于重命名属性:
respond_to do |format|
format.json { render :json => @result.to_json(:only => :id, :methods => :name }
end
答案 1 :(得分:0)
尝试使用json gem。它允许你做像
这样的事情@result.to_json
将您的结构(例如,哈希)转换为json格式。如果您正在使用Ruby on Rails,那么您应该已经可以访问此功能,因此只需创建一个Hash并调用to_json。
答案 2 :(得分:0)
要创建该特定格式的JSON对象,需要一个包含其元素哈希值的ruby数组。
@result = [{:id => "10", :name => "Full House"}, {:id => "789", :name => "blahblah"},...]
Rails会在渲染响应块中正确地将ruby数组转换为json:
respond_to do |format|
format.json { render :json => @result}
end
答案 3 :(得分:0)
我使用的jQuery插件(FCBKComplete)需要具有特定键名的json结果,特别是'caption'和'value',这在我调用to_json
的数组中不存在。
所以我这样做了(hacky,但它确实有效):
render :json => taggings.map { |t| {:caption => t.tag.name, :value => t.tag.name} }.to_json
其中taggings
是由ActiveRecord查找返回的数组,并返回json,如下所示:
[{"value":"tag.a","caption":"tag.a"},{"value":"tag.b","caption":"tag.b"}]