2011-08-13 3 views
22

JSON 문자열의 서버에서 응답이 매우 큽니다. JSON 개체로 변환 한 다음 키를 가져 와서 반복합니다.JsonObject의 키를 반복 할 때 서버의 응답과 순서가 다릅니다.

문제는 서버에서 응답 할 때와 같은 순서로 반복하지 않는 경우입니다.

다음으로 List<String>에있는 모든 키를 추가하고 정렬 한 다음 다른 키를 추가하여 다른 방법을 적용한 다음 반복기를 가져 오지만 여전히 응답 할 때와 다릅니다.

코드 예제는 여기에 있습니다 :

JSONObject jsonObject = new JSONObject(responseString); 
    Iterator<String> myIter = jsonObject.keys(); 


    List<String> sortKey = new ArrayList<String>(); 

    while(myIter.hasNext()){ 
     sortKey.add(myIter.next()); 
    } 
    Collections.sort(sortKey); 

답변

18

JSON 객체의 키의 순서는 의미가 있어야되지 않습니다. 특정 순서를 원한다면 객체가 아닌 배열을 사용해야합니다.

Java 코드는 키를 사전 순으로 정렬합니다. 객체에서 키의 초기 순서를 가져 오는 방법은 없습니다.

Reference 1 :

키의 순서

Reference 2 미정이다 목적은 이름/값 쌍의 순서화 된 집합이다

+0

고맙습니다.하지만 다음 질문을 지금보십시오. http://stackoverflow.com/questions/7053915/how-to-parse-a-jsonobject-using-jsonarray-that-have-dynamic-ids-in-start-as-inte – mastermind

+3

솔직히 말하면 나는 생각하지 않습니다. 이 답변은 100 % 사실입니다. 예를 들어, 환전 배열의 경우 {name -> info} 쌍이 될 수 있고 이름은 "중요"즉, USD가 1 등일 때 정렬 할 수 있습니다. 물론이 paris를 배열 항목에 넣을 수 있습니다. 그러나 추가 둥지가 있습니다. 제 요점은 "사전"객체의 항목 순서가 의미있는 많은 이유가있을 수 있다는 것입니다. 이것이 json 사양의 일부가 아니라면 사양이 잘못되었습니다. 사람들은 데이터 구조를 가능한 한 깨끗하고 단순하게 유지하려고하지 않습니다. –

+0

@ superarts.org : JavaScript 객체 *의 키를 주문해야하는지 여부는 문제가 아닙니다. 질문은 자바 스크립트 객체 *의 키가 주문되었는지 여부입니다. 그리고 그들은 그렇지 않습니다. –

17

당신이 사용할 수있는 키와 값을 입력하는 정렬 된지도. 이 같은 것

public static List listFromJsonSorted(JSONObject json) { 
    if (json == null) return null; 
    SortedMap map = new TreeMap(); 
    Iterator i = json.keys(); 
    while (i.hasNext()) { 
     try { 
      String key = i.next().toString(); 
      JSONObject j = json.getJSONObject(key); 
      map.put(key, j); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return new LinkedList(map.values()); 
} 
0

알파벳순으로 1024 개 이상의 웹 사이트 목록을 표시하는 내 안드로이드 응용 프로그램의 섹션에서 작업하는 동안 비슷한 문제가 발생했습니다. json traversal이 정렬 된 순서가 아니기 때문에, 방금 탐색하는 동안 json 값을 테이블에 삽입하고 커서가있는 웹 사이트 목록을 정렬 된 목록으로 가져 왔습니다.

서버에서 가져 오는 데이터를 저장하는 경우 데이터베이스를 쿼리하여 원하는 순서로 값을 정렬 할 수 있습니다.

+0

예 처음에 말한 것은 당신이 말했지만, 확실히 시간이 걸릴 것이지만 나는 json과 자바 함수를 통해 정렬을 찾고 있습니다. –

관련 문제