2014-12-05 31 views
0

我有一個JSON對象的形式如何將JSONArray轉換爲LinkedHashMap <String,String>?

{ 「PAGEID」:1, 「stgId」:1, 「用戶id」:2 「requestStageId」:0 「requestPageId」:0, 「回答」 :[{ 「QID」: 「6」, 「ansValue」: 「1」},{ 「QID」: 「11」, 「ansValue」: 「10」}]}

我接收數據作爲:

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」}]

現在我需要轉換在JSONArray answer_Array要LinkedHashMap中,其中QID將是關鍵ansValue將是價值

這怎麼辦?

+0

這會不會給你預計免費的數據結構,但你可以自己構建它:http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java – Misch 2014-12-05 09:38:00

+0

檢查此http://stackoverflow.com/a/17037364/1939607 – TheRedFox 2014-12-05 09:40:19

+1

您是否使用傑克遜或任何json庫解析json? – iNan 2014-12-05 09:44:49

回答

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

你可以這樣做(爲避免覆蓋)

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)); 
} 

主要原因我已經做了"qId"+i是要在哈希映射數據,因此,如果再相同的密鑰它-111 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

地圖的大小是多少?它是否覆蓋?你能打印地圖數據嗎? – 2014-12-05 11:13:52

相關問題