对JSON值进行排序?
问题描述:
我有一个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']
结果是未排序的列表。我怎样才能得到一个国家名称的有序列表?
答
你有一个字符串作为回应。它在操作之前,你应该把它转换为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
嗯,它不工作,所以我试着用JSON.load(response)['Result']。sort_by {| k,v | v [“Name”]}但它也失败了。 – StandardNerd
您是否注意到我在我的示例中连接了您的输入以适应页面宽度? – mudasobwa
@Michael我使用Ruby 1.9.3,错误是“NoMethodError”和'block in rest_request','each','sort_by'... – StandardNerd