0

How to fetch this data using json.Is it an object or an array? I am confused. Below is my data and what I have implemented. I am unable to get any values. Please help me to fetch the values.

    JSONObject jobject = new JSONObject(response);
    JSONArray jsonArray = jobject.getJSONArray("variety");
    for (int i =0; i<=jsonArray.length();i++){
        jobject=  jsonArray.getJSONObject(i);
        txt_today_671.setText(jobject.getString("variety.coc671"));
      }

     {
    "status": 200,
    "variety": {
        "coc671": {
            "today": 0,
            "todate": 0
        },
        "co92005": {
            "today": 0,
            "todate": 0
        },
     },
        "others": {
            "today": 0,
            "todate": 0
        }
    },
    "distance": {
        "0to20": {
            "today": 0,
            "todate": 0
        },
        "20to40": {
            "today": 0,
            "todate": 0
        },
    "above100": {
            "today": 0,
            "todate": 0
        }
    }
}
Pranav P
  • 1,755
  • 19
  • 39
Abm
  • 271
  • 2
  • 15
  • 1
    The json Object starts from {} and Array starts from [] , so look again now and tell what is it – A.s.ALI Dec 10 '18 at 05:17
  • @Shararti KAKI - All are objects – Abm Dec 10 '18 at 05:18
  • yes , now you can get what you want – A.s.ALI Dec 10 '18 at 05:19
  • @Shararti KAKI - Help me fetch the values.. – Abm Dec 10 '18 at 05:19
  • Instead of `JSONArray jsonArray = jobject.getJSONArray("variety");` you should fetch it like `JSONObject object = jobject.getJSONObject("variety");` variety is `JSONObject` not `JSONArray` everything which is wrapped in {} is Object and everything which is wrapped in [] is an array. And instead of looping you can iterate over an object. look at this answer for that https://stackoverflow.com/a/10593838/4985413 – Prashant Dec 10 '18 at 05:21
  • @AparnaMutnalkar see this example yout will get more idea about json parsing https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ – Vishal Thakkar Dec 10 '18 at 05:44

2 Answers2

3

Here, variety and distance is not jsonArray, it's a jsonObject.

To iterate through jsonObject follow below mechanism-

JSONObject varietyObject = jobject.getJSONObject("variety");
Iterator<JSONObject> keysVariety = varietyObject.keys();

while(keysVariety.hasNext()) {
String keyVariety = keysVariety.next();
    JSONObject objectVariety = varietyObject.getJSONObject(keyVariety);
    // here you will get inner String/int values
    int today = objectVariety.getInt("today");
    int todate = objectVariety.getInt("todate");
}

Do same for distance object-

JSONObject distanceObject = jobject.getJSONObject("distance");
Iterator<JSONObject> keysDistance = distanceObject.keys();

while(keysDistance.hasNext()) {
String keyDistance = keysDistance.next();
    JSONObject objectDistance = distanceObject.getJSONObject(keyDistance);
    // here you will get inner String/int values
    int today = objectDistance.getInt("today");
    int todate = objectDistance.getInt("todate");
}

Always remember JSONArray starts with [ and JSONObject start with {

Exigente05
  • 2,161
  • 3
  • 22
  • 42
  • It should be Iterator not Iterator. Sorry for that mistake. Please check my updated answer and if it helps you to solve, please accept the answer. :) – Exigente05 Dec 10 '18 at 05:57
  • @Exigente05 this should be comment not answer. – Vishal Thakkar Dec 10 '18 at 07:31
  • @ Exigente05 - im unable to fetch distance values – Abm Dec 10 '18 at 07:50
  • Check your json is valid or not -https://jsonformatter.curiousconcept.com/ I had ti change something to make it valid Above code is working - https://ibb.co/B3nst77 There is little change in variable naming. See updated answer – Exigente05 Dec 10 '18 at 08:18
0

to just illustrate you a little , here in the demo there could be typo mistakes,

JSONObject jobject = new JSONObject(response); // here you are getting all your object in one object
JSONObject varityObject= jobject.getJSONObject("variety");
//NOW USE varityObject to get coc671 and  co92005
//Similarly 
JSONObject distanceObject= jobject.getJSONObject("distance");
// now use distanceObject to get its items 
A.s.ALI
  • 1,992
  • 3
  • 22
  • 54