Reputation: 1237
{obj} 0
{obj} 1
{obj} 2
My plan is to iterate through values "journeys" and store them in an ArrayList
. Similarly, store "legs" in another ArrayList
and finally get retrieve the value for the object instruction
. As you can see parent journeys
has 3 child {obj} 0
, {obj} 1
, {obj} 2
. I can get the journeys
stored using --
ArrayList<JSONObject> journey = new ArrayList<>();
ArrayList<JSONArray> leg = new ArrayList<>();
ArrayList<JSONObject> legDetails = new ArrayList<>();
try {
JSONArray jArray = object.getJSONArray("journeys");
if (jArray != null) {
for (int i=0;i<jArray.length();i++){
journey.add(jArray.getJSONObject(i));
}
if (!journey.isEmpty()){
for (int j=0;j<journey.size();j++){
leg.add(journey.get(j).getJSONArray("legs"));
}
}
if (!leg.isEmpty()){
for (int i = 0; i<leg.size();i++){
legDetails.add(leg.get(i).getJSONObject(i));
}
}
}
}
catch (JSONException e) {
e.printStackTrace();
}
Now each journey returns 2 legs and the number changes time to time. I was expecting 6 JSONObject
at the end of last for
loop but I only get 2 and a out of range exception.
Things to remember: Journey has Routes (Obj 0,1,2). Routes has legs (Obj 0,1). Legs consists of instruction
with detail
string.
Is this right approach to retrieve the value? and what am I doing wrong?
Upvotes: 0
Views: 89
Reputation: 2536
problem is here
if (!journey.isEmpty()){
for (int j=0;j<journey.size();j++){
leg.add(journey.get(j).getJSONArray("legs"));
}
}
journery's have 3 objects.
for j=0 you add journey[0] array to leg
for j=1 you add journey[1] array to leg
for j=2 you add journey[2] array to leg
so legs will have 3 arrays.
if (!leg.isEmpty()){
for (int i = 0; i<leg.size();i++){
legDetails.add(leg.get(i).getJSONObject(i));
}
}
here leg.size()=3;
for i=0 it will add leg[0]'s [0]th element
for i=1 it will add leg[1]'s [1]th element
for i=2 it will add leg[2]'s [2]th element (this is out of range)
update ::
if (!leg.isEmpty()){
for (int i = 0; i<leg.size();i++){
for(int j=0;j<leg.get(i).size();j++)
legDetails.add(leg.get(i).getJSONObject(j));
}
}
This should help
Upvotes: 2