Arindam Das
Arindam Das

Reputation: 173

How To Convert JSONArray To LinkedHashMap<String,String>?

I have a JSON Object in The Form

{"pageId":1,"stgId":1,"userId":2,"requestStageId":0,"requestPageId":0,"answer":[{"qId":"6","ansValue":"1"},{"qId":"11","ansValue":"10"}]}

I receive the data as :

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

ie, answer_Array conatins :

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

Now I need To Convert the JSONArray answer_Array To LinkedHashMap, where qid will be the key and ansValue will be the Value.

How can This be done ?

Upvotes: 0

Views: 6551

Answers (4)

user3145373 ツ
user3145373 ツ

Reputation: 8156

You Can do something like (To Avoid Overwrite):

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

Main Reason I have done "qId"+i is that you want data in Hashmap so if the same key then it ll overwrite the already exist. and you want qId as key.

It's better to use List instead of it and make one class of data it will work perfect.

OR YOU CAN TRY

My code (With 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());
}

Upvotes: 1

Arindam Das
Arindam Das

Reputation: 173

This method Works For me ->

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

Upvotes: 0

Raghav
Raghav

Reputation: 4638

You can write a helper method which takes answer array as input and returns map of question and answer.

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

Upvotes: 1

Sashi Kant
Sashi Kant

Reputation: 13465

You can iterate the Array and use this method

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

Upvotes: 1

Related Questions