我有这个:
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。
我如何以这种格式获得它?
答案 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。