在ruby中格式化

Mat*_*iby 0 ruby json ruby-on-rails

我有这个:

artists = search_object.map{|x| x["artistName"]}.uniq
=> ["Metallica", "Madonna", "Lady Gaga"]
Run Code Online (Sandbox Code Playgroud)

我需要这种格式json:

{"artists":[{"name":"Metallica"},{"name":"Madonna"},{"name":"Lady Gaga"}]}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

>>     @api = {}
=> {}
>>          @api[:artists] = artists
=> ["Metallica", "Madonna", "Lady Gaga"]
>> @api
=> {:artists=>["Metallica", "Madonna", "Lady Gaga"]}
Run Code Online (Sandbox Code Playgroud)

我在这样的api调用中需要它:

respond_to do |format|
  format.json { render :json => @api}
end
Run Code Online (Sandbox Code Playgroud)

但是什么回来是不合适的json.

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

tok*_*and 8

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

artists = ["Metallica", "Madonna", "Lady Gaga"]
@api = {:artists => artists.map { |artist| {:name => artist} }}
#=> {:artists=>[{:name=>"Metallica"}, {:name=>"Madonna"}, {:name=>"Lady Gaga"}]}
Run Code Online (Sandbox Code Playgroud)

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