Pyae Phyoe Shein
Pyae Phyoe Shein

Reputation: 13827

Optimize JSonArray for Loop

Today, I'm trying to optimize my JSONArray regarding android developer documentation. I was supposed to optimize it but there is error message coming out.

JSONArray infojson = json.getJSONArray("getInfo");          
for(int i=0;i < infojson.length();i++){                                     
    JSONObject e = infojson.getJSONObject(i);
    hm = new HashMap<String, Object>();
    hm.put(MYNAME, e.getString("uname"));
    hm.put(MYAGE, e.getString("uage"));
}

And I've optimized above coding as follow

JSONArray infojson = jsonObject.getJSONArray("getInfo");
for (Object o : infojson ) {
    JSONObject jsonLineItem = (JSONObject) o;
    String myname = jsonLineItem.getString("uname");
    String myage = jsonLineItem.getString("uage");
}

Unfortunately, I got the following error message occuring on "infojson ) {"

Can only iterate over an array or an instance of java.lang.Iterable

Upvotes: 5

Views: 6303

Answers (3)

Mirza Hadzic
Mirza Hadzic

Reputation: 11

If you have very long arrays, don't iterate it that way. You can use gson to convert JSONArray to java array, like this:

static class Elem {    
   public String uname;
   public double uage;
}

...
JSONArray infojson = json.getJSONArray("getInfo");
String arrAsStr = infojson.toString();
Elem[] naviPoints = new Gson().fromJson(arrAsStr, Elem[].class);

Upvotes: -1

soBinary
soBinary

Reputation: 429

You're getting that error because JSONArray doesn't implement the Iterable interface.

In short, there's no clean way to solve this; you'd have to serialize the JSONObjects into your custom class.

To save you time though, using (Object one: all) over (i=0; i < all.getLength(); i++) won't give you any runtime improvements.

Just stick to the normal for loop.

Upvotes: 2

momo
momo

Reputation: 21353

You can't use JSONArray with the that syntax as it doesn't implement Iterable interface. As a side note, the micro performance improvement you get probably won't affect your application performance as JSON results that are returned from the WebService are typically not large in size.

Upvotes: 8

Related Questions