排序JSON值?

Sta*_*erd 1 ruby 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"}]}'
Run Code Online (Sandbox Code Playgroud)

如何在名称后对其进行排序?

response.sort_by { |k, v| v["Name"] }
Run Code Online (Sandbox Code Playgroud)

不起作用.

工作是什么:

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']
Run Code Online (Sandbox Code Playgroud)

结果是未排序的列表.如何获得有序的国家/地区名称列表?

Ale*_*kin 6

你有一个字符串作为回应.在对它进行操作之前,您应该将其转换为Hash:

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

然后做你想做的事:

hash['Result'].sort_by { |v| v["Name"] }
#                         ? v here since it’s an array of hashes
Run Code Online (Sandbox Code Playgroud)

要获得有序的国家/地区名称列表:

hash['Result'].map { |v| v["Name"] }.sort
Run Code Online (Sandbox Code Playgroud)

  • @ArupRakshit这是胡说八道.`require`不需要在顶部. (2认同)