2014-12-05 2 views
0

내가 형태의 JSON 개체를JSONArray를 LinkedHashMap <String, String>으로 변환하는 방법?

{ "페이지 id": 1, "stgId": 1, "userId를"2 "requestStageId을": 0, "requestPageId": 0, "답" [{ "QID": "6", "ansValue": "1"}, { "QID": "11", "ansValue": "10"}]

} I 데이터로서 나타날 :

long uid = (long)inputJsonObj.get("userId"); 
long stgid = (long)inputJsonObj.get("stgId"); 
long pgid = (long)inputJsonObj.get("pageId"); 
JSONArray answer_Array = (JSONArray) inputJsonObj.get("answer"); 

즉, answer_Array의 conatins :

,

[{ "QID": "6", "ansValue": "1"}, { "QID": "11", "ansValue": "10"}]

지금은 변환해야 QIDansValue 것의 LinkedHashMap,에 JSONArray answer_Array.

어떻게 할 수 있습니까?

+0

이 당신에게 제공하지 않습니다 예상 데이터 구조는 무료이지만, 직접 빌드 할 수 있습니다. http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java – Misch

+0

이것을 확인하십시오 http://stackoverflow.com/a/17037364/1939607 – TheRedFox

+1

json을 구문 분석하기 위해 Jackson 또는 json 라이브러리를 사용하고 있습니까? – iNan

답변

1

당신은 배열을 반복하고 당신은 입력으로 배열 답변을 받아 질문과 대답의지도를 반환하는 도우미 메서드를 작성할 수 있습니다이 방법을

public static Map parseStringToMap(String param) 
    { 
     Map result = new HashMap<String,String>(); 
     if(param!=null) 
     { 
      StringBuffer sb  = new StringBuffer(param);  
      try 
      { 
       String str = sb.substring(1, sb.length()-1); 
       String[] srArray = str.split(","); 
       String tempStr = null; 
       for(int i=0;srArray!=null && i<srArray.length;i++) 
       { 
        tempStr = srArray[i]; 
        if(tempStr!=null && tempStr.contains(":")) 
        { 
         String[] keyVal = tempStr.split(":"); 
         if(keyVal.length>1) 
          result.put(keyVal[0], keyVal[1]); 
         else 
          result.put(keyVal[0], ""); 
        } 

       } 

      } 
      catch(Exception e) 
      { 
       System.out.println("In JSONConverter: Issue while parsing the JSON => "+e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 
     return result; 
    } 
1

를 사용할 수 있습니다.

private static Map<String, String> getHashMapFromJson(JSONArray answer_Array) { 

     Map<String, String> qaMap = new LinkedHashMap<String, String>(); 

     Iterator<JSONObject> iterator = answer_Array.iterator(); 

     while (iterator.hasNext()) { 
      JSONObject value = iterator.next(); 

      qaMap.put((String) value.get("qId"), (String) value.get("ansValue")); 
     } 

     return qaMap; 
    } 
1

당신은 같은 (덮어 쓰기를 방지 할 수있는)을 수행 할 수 있습니다 내가 "qId"+i했을

Map result = new HashMap<String,String>(); 
for(int i = 0 ; i < jArray.length() ; i++){ 
     JSONObject object = jArray.getJSONObject(i); 
     result.put(object.getString("qId"), object.getString("ansValue")); 
} 

for (Object variableName: result.keySet()){ 
     System.out.println(String.valueOf(variableName)); 
     System.out.println(result.get(variableName)); 
} 

주된 이유는 당신이 해시 맵 데이터를 원하는 것과 같은 키 다음은 overwrite the already exist를 어떠냐 그렇다면. qId을 키로 사용하려고합니다.

대신 List을 사용하고 완벽한 데이터 유형을 만드는 것이 좋습니다.

또는 당신은 (목록 포함)

내 코드 시도 할 수 있습니다 :

static class KeyVal{ 
    String qkey; String qval; String akey; String aval; 
    public String getQkey() {return qkey;} 
    public void setQkey(String qkey) { this.qkey = qkey;} 
    public String getQval() {return qval;} 
    public void setQval(String qval) {this.qval = qval;} 
    public String getAkey() {return akey;} 
    public void setAkey(String akey) {this.akey = akey;} 
    public String getAval() {return aval;} 
    public void setAval(String aval) {this.aval = aval;} 
} 
List<KeyVal> data = new ArrayList<>(); 
KeyVal key; 
for(int i = 0 ; i < ja.length() ; i++){ 
    JSONObject object = ja.getJSONObject(i); 
    key = new KeyVal(); 
    key.setQkey("qId"); key.setQval(object.getString("qId")); 
    key.setAkey("ansValue"); key.setAval(object.getString("ansValue")); 
    data.add(key); 
} 
for(int i = 0 ; i < data.size() ; i++){ 
    System.out.println(data.get(i).getQkey() + " : " + data.get(i).getQval()); 
    System.out.println(data.get(i).getAkey() + " : " + data.get(i).getAval()); 
} 
0

이 방법은 나를 위해 작동 ->

/* Extract The JSONArray and insert The qid and ansValue into the HashMap<String,String> */ 

     JSONArray answer = (JSONArray) inputJsonObj.get("answer");         
       JSONParser parser3 = new JSONParser(); 
       JSONObject jsonObject3 = null; 
       for(int i=0;i< answer.size();i++){      
        System.out.println(answer.get(i).toString()); 
        Object obj3 = parser3.parse(answer.get(i).toString()); 
        jsonObject3 = (JSONObject) obj3; 
        String qid = (String) jsonObject3.get("qId"); 
        String ansValue = (String) jsonObject3.get("ansValue");      
        map.put(qid, ansValue); 
       } 
+0

지도의 크기는 얼마입니까? 그것은 덮어 쓴 것입니까? 지도 데이터를 인쇄 할 수 있습니까? –

관련 문제