0

I'm trying to display following JSON to my RecyclerView and perform action accordingly. Now, the problem is, How can I access each key from JSON object and values inside keys. Do I need to store them in Java Objects with POJO or Array? I'm getting following response from server so I don't want to store them statically, I want to store it dynamically.

I looked for solution for the same but most of them include JSONArray and my response doesn't include any JSONArray. It includes key and JSONObject as a value. I don't know java as well, I am webdev, I've been looking for it for a day now.

{
"response": {
    "status": 200,
    "result": {
        "17": {
            "key1": "3",
            "key2": "111111",
            "key3": "aaa",
            "key4": "sss",
            "key5": "[email protected]",
            "key6": "1122334455",
            "key7": "2017-12-11",
            "key7": "something",
            "key9": "location"
        },
        "18": {
            "key1": "3",
            "key2": "111111",
            "key3": "aaa",
            "key4": "sss",
            "key5": "[email protected]",
            "key6": "1122334455",
            "key7": "2017-12-11",
            "key7": "something",
            "key9": "location"
        },
        "19": {
            "key1": "3",
            "key2": "111111",
            "key3": "aaa",
            "key4": "sss",
            "key5": "[email protected]",
            "key6": "1122334455",
            "key7": "2017-12-11",
            "key7": "something",
            "key9": "location"
        }
    }
  }
}

I have Result JSONObject in a string,

  public void onResponse(JSONObject response) {
                String status = null;
                try {
                    JSONObject responseCode = response.getJSONObject("response");
                    status = responseCode.getString("result");
                    //Todo

                } catch (JSONException e) {
                    e.printStackTrace();
                    defaultView.setText("Json Error");
                }

                defaultView.setText(status);

            }
2
  • stackoverflow.com/a/6796987/2633909 Commented Dec 23, 2018 at 8:06
  • Not a chance you're using Retrofit? Commented Dec 23, 2018 at 16:17

3 Answers 3

1

Firstly I guess your example "key7": "something" should actually be "key8..".

Gson can parse any valid JSON to a LinkedTreeMap that you can then loop any way you want. However, your response seems to be static to some extent so you can create a DTO to make accessing values a bit easier. This DTO could be like:

@Getter
public class ResponseWrapper {
    @Getter
    public static class Response {
        private Integer status;
        private Map<Integer, Map<String, Object>> result;       
    }
    private Response response;
}

With this kind of a DTO you could then do foo example (and assuming no Java8 & Streams):

Response rw = new Gson().fromJson(RESPONSE_JSON, ResponseWrapper.class).getResponse();
Set<Entry<Integer, Map<String, Object>>> entries = rw.getResult().entrySet();
for(Entry<Integer, Map<String, Object>> e : entries) {
    Object o = e.getValue().get("key1");
    // do somethigs
}

If your example's result keys (17,18,19) contain a fixed set of keys - so just from key1 to key9 with the same data types - you could create a separate DTO for that also, like:

@Getter
public class ResultItem {
    private Long key1;
    private Long key2;
    private String key3;
    private String key4;
    private String key5;
    private Long key6;
    private Date key7;
    private String key8;
    private String key9;
}

and then your access to values might be just a bit more type safe, for example:

for(Entry<Integer, ResultItem> e : entries) {
    Long longKey1 = e.getValue().getKey1();
    // do somethings
}
Sign up to request clarification or add additional context in comments.

Comments

0

at the begging you can need to create your POJO's ,this site to create your POJO JsonToPojoLink

then you can use GSON like this:

   Gson gson = new Gson();
    ResponsePOJO responsePOJO;
    responsePOJO= gson.fromJson(response.toString(),ResponsePOJO.class);

Comments

0

You have a response of result object with multiple object values.
So, you can simply apply a logic behind like,

JSONObject responseCode = response.getJSONObject("response");  
JSONObject resultCode = responseCode.getJSONObject("result");

    if(resultCode.length >0){
        for(int i=0;i<resultCode;i++){
            JSONObject listCode = resultCode.getJSONObject(i);
            String keyVal_1=listCode.getString("key1");
//store keyVal_1 in your arrayList and other keys 
//it will work till the dynamically generated last object you store.
        }
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.