2014-12-05 5 views
0

У меня есть JSON объекта в видеКак преобразовать JSONArray в LinkedHashMap <String, String>?

{ "PageId": 1, "stgId": 1, "идентификатор пользователя": 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 будет Value.

Как это можно сделать?

+0

Это не даст вам ожидаемая структура данных бесплатно, но вы сможете ее самостоятельно создать: http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java – Misch

+0

проверить это http://stackoverflow.com/a/17037364/1939607 – TheRedFox

+1

Вы используете Джексон или любой json lib для разбора 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

вы можете сделать что-то вроде (чтобы избежать перезапись):

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, что вы хотите данные в Hashmap так, если тот же самый ключ, то он Л.Л. 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

Каков размер карты? Переписывается ли она? можете ли вы распечатать данные карты? –