2011-03-18 81 views
0

我有这样的:格式红宝石

artists = search_object.map{|x| x["artistName"]}.uniq 
=> ["Metallica", "Madonna", "Lady Gaga"] 

我需要这种格式的JSON:

{"artists":[{"name":"Metallica"},{"name":"Madonna"},{"name":"Lady Gaga"}]} 

我尝试这样做:

>>  @api = {} 
=> {} 
>>   @api[:artists] = artists 
=> ["Metallica", "Madonna", "Lady Gaga"] 
>> @api 
=> {:artists=>["Metallica", "Madonna", "Lady Gaga"]} 

我需要它的API调用像这样:

respond_to do |format| 
    format.json { render :json => @api} 
end 

但最新返回是不正确的json。

我该如何获得这种格式?

回答

8

一个简单Enumerable#map应该做的:

artists = ["Metallica", "Madonna", "Lady Gaga"] 
@api = {:artists => artists.map { |artist| {:name => artist} }} 
#=> {:artists=>[{:name=>"Metallica"}, {:name=>"Madonna"}, {:name=>"Lady Gaga"}]} 

注意,您可以使用符号作为哈希键(这是更地道),因为它们都转换为JSON作为普通字符串。