2014-01-23 4 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['Result'].sort_by { |v| v["Name"] } 
#       ⇑ v here since it’s an array of hashes 

가 국가 이름의 정렬 된 목록을 얻으려면 : 당신이 원하는 무엇이든 할 다음

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

과 : 그것을 사용하기 전에, 당신이 Hash로 변환해야

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

흠을, 그것은 작동하지 않습니다 그래서 JSON.load (응답) [ '결과']. 시도 sort_by {| k, v | v [ "Name"]}하지만 실패했습니다. – StandardNerd

+0

예제에서 페이지 너비에 맞게 입력 내용을 연결 한 것을 보셨습니까? – mudasobwa

+0

@Michael Ruby 1.9.3을 사용하고 오류는 "NoMethodError"이고 'rest_request', 'each', 'sort_by'... – StandardNerd