可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am building an android app that needs to download and synchronise with an online database, I am sending my query from the app to a php page which returns the relevant rows from a database in JSON format.
can someone please tell me the best way to iterate through a JSON array?
I receive an array of objects:
[{json object},{json object},{json object}]
What is the simplest piece of code I could use to access the JSONObjects in the array?
EDIT: now that I think of it the method I used to iterate the loop was:
for (String row: json){
id = row.getInt(\"id\");
name = row.getString(\"name\");
password = row.getString(\"password\");
}
So I guess I had was somehow able to turn the returned Json into and iterable array. Any Ideas how I could achieve this?
I apologise for my vaguness but I had this working from an example I found on the web and have since been unable to find it.
回答1:
I have done it two different ways,
1.) make a Map
HashMap<String, String> applicationSettings = new HashMap<String,String>();
for(int i=0; i<settings.length(); i++){
String value = settings.getJSONObject(i).getString(\"value\");
String name = settings.getJSONObject(i).getString(\"name\");
applicationSettings.put(name, value);
}
2.) make a JSONArray of names
JSONArray names = json.names();
JSONArray values = json.toJSONArray(names);
for(int i=0; i<values.length(); i++){
if (names.getString(i).equals(\"description\")){
setDescription(values.getString(i));
}
else if (names.getString(i).equals(\"expiryDate\")){
String dateString = values.getString(i);
setExpiryDate(stringToDateHelper(dateString));
}
else if (names.getString(i).equals(\"id\")){
setId(values.getLong(i));
}
else if (names.getString(i).equals(\"offerCode\")){
setOfferCode(values.getString(i));
}
else if (names.getString(i).equals(\"startDate\")){
String dateString = values.getString(i);
setStartDate(stringToDateHelper(dateString));
}
else if (names.getString(i).equals(\"title\")){
setTitle(values.getString(i));
}
}
回答2:
I think this code is short and clear:
int id;
String name;
JSONArray array = new JSONArray(string_of_json_array);
for (int i = 0; i < array.length(); i++) {
JSONObject row = array.getJSONObject(i);
id = row.getInt(\"id\");
name = row.getString(\"name\");
}
Is that what you were looking for?
回答3:
unfortunately , JSONArray doesn\'t support for each statement, like:
for(JSONObject someObj : someJsonArray) {
// do something about someObj
....
....
}
回答4:
If you\'re using the JSON.org Java implementation, which is open source, you can just make JSONArray implement the Iterable
interface and add the following method to the class:
@Override
public Iterator iterator() {
return this.myArrayList.iterator();
}
This will make all instances of JSONArray iterable, meaning that the for (Object foo : bar)
syntax will now work with it (note that foo has to be an Object, because JSONArrays do not have a declared type). All this works because the JSONArray class is backed by a simple ArrayList, which is already iterable. I imagine that other open source implementations would be just as easy to change.
回答5:
On Arrays, look for:
JSONArray menuitemArray = popupObject.getJSONArray(\"menuitem\");
回答6:
You are using the same Cast object for every entry.
On each iteration you just changed the same object instead creating a new one.
This code should fix it:
JSONArray jCastArr = jObj.getJSONArray(\"abridged_cast\");
ArrayList<Cast> castList= new ArrayList<Cast>();
for (int i=0; i < jCastArr.length(); i++) {
Cast person = new Cast(); // create a new object here
JSONObject jpersonObj = jCastArr.getJSONObject(i);
person.castId = (String) jpersonObj.getString(\"id\");
person.castFullName = (String) jpersonObj.getString(\"name\");
castList.add(person);
}
details.castList = castList;
回答7:
When I tried @vipw\'s suggestion, I was faced with this exception:
The method getJSONObject(int) is undefined for the type JSONArray
This worked for me instead:
int myJsonArraySize = myJsonArray.size();
for (int i = 0; i < myJsonArraySize; i++) {
JSONObject myJsonObject = (JSONObject) myJsonArray.get(i);
// Do whatever you have to do to myJsonObject...
}
回答8:
While iterating over a JSON array (org.json.JSONArray, built into Android), watch out for null objects; for example, you may get \"null\"
instead of a null string.
A check may look like:
s[i] = array.isNull(i) ? null : array.getString(i);