2014-01-23 55 views
1

我有一个JSON列表,如:对JSON值进行排序?

response = '{"ContainsErrors":false,"Result":[{"Name":"Aegypten","IsoCode":"EG"},{"Name":"Aequatorialguinea","IsoCode":"GQ"},{"Name":"Aethiopien","IsoCode":"ET"},{"Name":"Afghanistan","IsoCode":"AF"},{"Name":"Albanien","IsoCode":"AL"},{"Name":"Algerien","IsoCode":"DZ"},{"Name":"Angola","IsoCode":"AO"},{"Name":"Antigua und Barbuda","IsoCode":"AG"},{"Name":"Argentinien","IsoCode":"AR"},{"Name":"Australien","IsoCode":"AU"},{"Name":"Bahamas","IsoCode":"BS"}]}' 

我怎样才能得到它的名字后排序?

response.sort_by { |k, v| v["Name"] } 

不起作用。

什么工作是:

response = RestClient.get("#{Settings.itineris.url}/de/RepInfo/#{action}") 
#response = '{"ContainsErrors":false,"Result":[{"Name":"Aegypten","IsoCode":"EG"},{"Name":"Aequatorialguinea","IsoCode":"GQ"},{"Name":"Aethiopien","IsoCode":"ET"},{"Name":"Afghanistan","IsoCode":"AF"},{"Name":"Albanien","IsoCode":"AL"},{"Name":"Algerien","IsoCode":"DZ"},{"Name":"Angola","IsoCode":"AO"},{"Name":"Antigua und Barbuda","IsoCode":"AG"},{"Name":"Argentinien","IsoCode":"AR"},{"Name":"Australien","IsoCode":"AU"},{"Name":"Bahamas","IsoCode":"BS"}]}' 

JSON.load(response)['Result'] 

结果是未排序的列表。我怎样才能得到一个国家名称的有序列表?

回答

6

你有一个字符串作为回应。它在操作之前,你应该把它转换为Hash

response = '{"ContainsErrors":false,"Result":[{"Name":"Aegypten","IsoCode":"EG"}]}' 
require 'json' 
hash = JSON.parse(response) 

,然后做你想做的:

hash['Result'].sort_by { |v| v["Name"] } 
#       ⇑ v here since it’s an array of hashes 

要获得国名的有序列表:

hash['Result'].map { |v| v["Name"] }.sort 
+0

嗯,它不工作,所以我试着用JSON.load(response)['Result']。sort_by {| k,v | v [“Name”]}但它也失败了。 – StandardNerd

+0

您是否注意到我在我的示例中连接了您的输入以适应页面宽度? – mudasobwa

+0

@Michael我使用Ruby 1.9.3,错误是“NoMethodError”和'block in rest_request','each','sort_by'... – StandardNerd