在ruby中格式化

时间:2011-03-18 22:48:44

标签: ruby-on-rails ruby json

我有这个:

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。

我如何以这种格式获得它?

1 个答案:

答案 0 :(得分:8)

一个简单的Enumerable#map应该:

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

请注意,您可以使用符号作为哈希键(它更加惯用),因为它们会像普通字符串一样转换为JSON。