Android/Java에서의 JSON 어레이 반복
온라인 데이터베이스와 동기화해야 하는 Android 앱을 만들고 있는데, 앱에서 해당 행을 데이터베이스에서 JSON 형식으로 반환하는 php 페이지로 쿼리를 보냅니다.
JSON 어레이를 통해 반복하는 가장 좋은 방법을 가르쳐 주시겠습니까?
다음과 같은 오브젝트 배열을 수신합니다.
[{json object},{json object},{json object}]
어레이 내의 JSONObject에 액세스하기 위해 사용할 수 있는 가장 간단한 코드 조각은 무엇입니까?
EDIT: 생각해 보니 루프를 반복하기 위해 사용한 방법은 다음과 같습니다.
for (String row: json){
id = row.getInt("id");
name = row.getString("name");
password = row.getString("password");
}
그래서 나는 어떻게든 돌아온 Json을 반복할 수 있는 배열로 바꿀 수 있었다고 생각한다.어떻게 하면 이 일을 해낼 수 있을까?
제 변덕스러움에 대해 사과드립니다만, 저는 웹에서 찾은 예에서 이 작업을 수행했지만 그 이후로는 찾을 수 없었습니다.
이 코드는 짧고 명확합니다.
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");
}
그게 당신이 찾고 있던 건가요?
두 가지 다른 방법으로 해봤는데
1) 맵 작성
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) 이름의 JSONAray 작성
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));
}
}
불행하게도,JSONArray 서포트하지 않음foreach다음과 같은 문장이 있습니다.
for(JSONObject someObj : someJsonArray) {
// do something about someObj
....
....
}
@vipw의 제안을 시도했을 때 다음과 같은 예외가 있었습니다. The method getJSONObject(int) is undefined for the type JSONArray
대신 이 방법이 효과가 있었습니다.
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...
}
오픈 소스인 JSON.org Java 구현을 사용하는 경우 JSONArray를 사용하여Iterable다음 메서드를 클래스에 추가합니다.
@Override
public Iterator iterator() {
return this.myArrayList.iterator();
}
이것에 의해, JSONAray 의 모든 인스턴스가 반복 가능하게 됩니다.즉, 이 명령어는for (Object foo : bar)이것으로 구문은 기능합니다(JSONAray에는 선언된 유형이 없기 때문에 foo는 오브젝트여야 합니다).JSONArray 클래스는 이미 반복 가능한 단순한 Array List에 의해 백업되기 때문에 이 모든 것이 작동합니다.다른 오픈 소스 구현도 마찬가지로 쉽게 변경할 수 있다고 생각합니다.
어레이에서 다음을 찾습니다.
JSONArray menuitemArray = popupObject.getJSONArray("menuitem");
모든 엔트리에 대해 동일한 Cast 객체를 사용하고 있습니다.반복할 때마다 새 개체를 만드는 대신 동일한 개체를 변경하기만 하면 됩니다.
이 코드로 해결할 수 있습니다.
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;
JSON 어레이(org.json)를 반복하고 있습니다.Android에 내장된 JSONArray)의 특수한 오브젝트를 주의해 주세요.예를 들어,"null"null 문자열 대신.
체크는 다음과 같습니다.
s[i] = array.isNull(i) ? null : array.getString(i);
언급URL : https://stackoverflow.com/questions/3408985/json-array-iteration-in-android-java
'source' 카테고리의 다른 글
| vue js html에서 시간에 따라 "닫힘" 또는 "열림"을 표시하려면 어떻게 해야 합니까? (0) | 2022.08.24 |
|---|---|
| 파이어베이스를 만들려고 시도하고 있습니다.auth().current 사용자 약속 (0) | 2022.08.24 |
| 이 코드에서 scanf()가 무한 루프를 일으키는 이유는 무엇입니까? (0) | 2022.08.24 |
| Java에서 문자열을 InputStream으로 변환하려면 어떻게 해야 하나요? (0) | 2022.08.24 |
| 페이지피드 통찰력이 "blob" 압축 및 캐시를 수정하도록 요구하는 이유는 무엇입니까? (0) | 2022.08.24 |