2011-12-18 4 views
0

저는 Android에서 앱을 개발 중입니다. 나는 다음과 같은 JSONJSON과 java 맵 사이에 명확한 설명이 필요합니다.

[{"id":"1","number":"2"},{"id":"3","number":"4"},{"id":"5","number":"6"},{"id":"7","number":"8"}] 

내가 세션 객체와 PHP (웹 서버)의 연결 부분을 완료하고, 문자열로 저장하고있다에게 제공 PHP의 API를 구축해야합니다. 지금 나는 (내가 해시 맵을 사용! 돈, 이것은 최선의 경우 t 알고 !!!! 어떤 제안을 환영합니다) 로컬 컬렉션을 저장하려면 내 된 JSONObject 배열의 정의 .Because 나는 다음을 선언합니다 : HashMap<Integer, LinkedHashMap<String, String>> hashmap; 일반 아이디어는 integer 색인에 저장하고 LinkedHashMap<String, String> 모든 jsonobject에 저장하는 것이 었습니다. 실패

hashmap[0] = {"id":"1","number":"2"} 
hashmap[1] = {"id":"3","number":"4"} 
hashmap[2] = {"id":"5","number":"6"} 

코드 : 내가 원하는 해시 맵의 인스턴스가 뭔가하는

JSONObject tempjson; 
     hashmap = new HashMap<Integer, LinkedHashMap<String,String>>(); 
     LinkedHashMap<String, String> linkedmap = new LinkedHashMap<String, String>();  
      for(int i=0;i<jsonarray.length();i++) 
      { 
       JSONObject tempjsonobject = jsonarray.getJSONObject(i); 



       linkedmap.put("id", tempjsonobject.getString("id")); 
       linkedmap.put("number", tempjsonobject.getString("id")); 

       hashmap.put(i, linkedmap); 

      } 

의 LinkedHashMap은 항상 마지막 항목이있다 ->"id":"7","number":"8"

그러나이 난의 선언을 할 경우 LinkedHashMap<String, String> linkedmap = new LinkedHashMap<String, String>(); 내부는 for loop입니다. 이런 이유

나에게 사람을 설명 할 수 있습니까? 주석에

+1

왜 http://jackson.codehaus.org 같은 실제 JSON 파싱 라이브러리를 사용하지 않는? – fge

+0

JSON 배열에 배열 유형을 사용하는 이유는 무엇입니까? –

+0

json이 너무 단순하기 때문에 반복되는 값의 배열입니다. 비록, 내가 왜 linkshasmap 해시 맵을 채우기 위해 for 루프 내부를 명확히해야하는지 이해하고 싶다 ????? – mpregos

답변

1

응답 : "JSON이 너무 간단하기 때문에, 반복되는 값의 배열 있지만, 내가 해시 맵을 채우기 위해 루프의 내부에 명확히 필요 linkedhasmap 이유를 이해 할 ?????."

오래된 질문,하지만 단지 그것에 대한 대답을 갖는 위해서. 내가 질문에 대답하기 시작 생각할 수 가장 쉬운 방법은이 샘플 코드입니다 : (가)에 대한 루프, 당신은의 LinkedHashMap (단지의 하나 개의 인스턴스와 함께 종료하기 전에/외부의 LinkedHashMap을 선언

public static void main(String...s){ 

    LinkedHashMap<String,String> lhMap = new LinkedHashMap<String,String>(); 
    lhMap.put("id", "a"); 
    lhMap.put("id", "b"); 

    //what do you think will be printed here "a" or "b" or "ab"? 
    for(String key : lhMap.keySet()) 
    { 
     System.out.print(lhMap.get(key)); 
    } 
    //confirmation by the map size 
    System.out.println(lhMap.size()); 
} 

위의 sampe 코드와 같음), for 루프에서 하나의 인스턴스를 계속 수정하고 HashMap에 새/다른 항목 인 것처럼 추가합니다.

for 루프 내에서 LinkedHashMap을 선언하면 반복 할 때마다 새로 만든 인스턴스가 생성됩니다. 즉, 생성 된 LinkedHashMaps의 수가 jsonarray.length()와 같고 HashMap에 새 인스턴스를 추가합니다. 모든 반복마다. 귀하의 질문하지만 사람을 대답해야

생각해은 JSON 파싱 라이브러리 및 스탠드 해결 된 문제에 대한 배열 유형을 사용하는 방법에 대해 말했다.

관련 문제