JSONAray에서 JSONObject 가져오기
서버로부터 회답으로 받은 JSONObject에 대해 조금 곤란해하고 있습니다.
jsonObj = new JSONObject(resultString);
JSONObject sync_reponse = jsonObj.getJSONObject("syncresponse");
String synckey_string = sync_reponse.getString("synckey");
JSONArray createdtrs_array = sync_reponse.getJSONArray("createdtrs");
JSONArray modtrs_array = sync_reponse.getJSONArray("modtrs");
JSONArray deletedtrs_array = sync_reponse.getJSONArray("deletedtrs");
String deleted_string = deletedtrs_array.toString();
{"syncresponse":{"synckey":"2011-09-30 14:52:00","createdtrs":[],"modtrs":[],"deletedtrs":[{"companyid":"UTB17","username":"DA","date":"2011-09-26","reportid":"31341"}]
수신한 응답에서 알 수 있듯이 JSONObject를 해석하여 syncresponse를 만들고 있습니다.jSON 객체로서 synckey를 작성했습니다.jSONArray로서 modtrs, deletedtrs를 작성합니다.deletedtrs에서 JSONObject에 액세스하여 분할하여 값을 사용할 수 있도록 합니다.즉, companyid, 사용자 이름, 날짜 등을 추출합니다.
어떻게 하면 좋을까요?
조언해 주셔서 감사합니다.
JSONArray 개체에는 기능이 있습니다.getJSONObject(int index)
단순한 for-loop을 쓰는 것으로, 모든 JSONObject를 루프 할 수 있습니다.
JSONArray array;
for(int n = 0; n < array.length(); n++)
{
JSONObject object = array.getJSONObject(n);
// do some stuff....
}
여기 당신의 아들이 있습니다.
{
"syncresponse": {
"synckey": "2011-09-30 14:52:00",
"createdtrs": [
],
"modtrs": [
],
"deletedtrs": [
{
"companyid": "UTB17",
"username": "DA",
"date": "2011-09-26",
"reportid": "31341"
}
]
}
}
구문 분석 중:
JSONObject object = new JSONObject(result);
String syncresponse = object.getString("syncresponse");
JSONObject object2 = new JSONObject(syncresponse);
String synckey = object2.getString("synckey");
JSONArray jArray1 = object2.getJSONArray("createdtrs");
JSONArray jArray2 = object2.getJSONArray("modtrs");
JSONArray jArray3 = object2.getJSONArray("deletedtrs");
for(int i = 0; i < jArray3 .length(); i++)
{
JSONObject object3 = jArray3.getJSONObject(i);
String comp_id = object3.getString("companyid");
String username = object3.getString("username");
String date = object3.getString("date");
String report_id = object3.getString("reportid");
}
JSONArray deletedtrs_array = sync_reponse.getJSONArray("deletedtrs");
for(int i = 0; deletedtrs_array.length(); i++){
JSONObject myObj = deletedtrs_array.getJSONObject(i);
}
{"syncresponse":{"synckey":"2011-09-30 14:52:00","createdtrs":[],"modtrs":[],"deletedtrs":[{"companyid":"UTB17","username":"DA","date":"2011-09-26","reportid":"31341"}]
companyid, 사용자 이름, 날짜 가져오기
jsonObj.syncresponse.deletedtrs[0].companyid
jsonObj.syncresponse.deletedtrs[0].username
jsonObj.syncresponse.deletedtrs[0].date
에서 출발하다
JSONArray deletedtrs_array = sync_reponse.getJSONArray("deletedtrs");
JSONArray를 반복하여 직접 값을 사용하거나 사용자 유형의 개체를 만들 수 있습니다.
각각의 내부 데이터 필드를 처리합니다.deletedtrs_array
멤버
반복
for(int i = 0; i < deletedtrs_array.length(); i++){
JSONObject obj = deletedtrs_array.getJSONObject(i);
Log.d("Item no."+i, obj.toString());
// create object of type DeletedTrsWrapper like this
DeletedTrsWrapper dtw = new DeletedTrsWrapper(obj);
// String company_id = obj.getString("companyid");
// String username = obj.getString("username");
// String date = obj.getString("date");
// int report_id = obj.getInt("reportid");
}
개체 유형
class DeletedTrsWrapper {
public String company_id;
public String username;
public String date;
public int report_id;
public DeletedTrsWrapper(JSONObject obj){
company_id = obj.getString("companyid");
username = obj.getString("username");
date = obj.getString("date");
report_id = obj.getInt("reportid");
}
}
Google gson 라이브러리를 사용하는 경우.
var getRowData =
[{
"dayOfWeek": "Sun",
"date": "11-Mar-2012",
"los": "1",
"specialEvent": "",
"lrv": "0"
},
{
"dayOfWeek": "Mon",
"date": "",
"los": "2",
"specialEvent": "",
"lrv": "0.16"
}];
JsonElement root = new JsonParser().parse(request.getParameter("getRowData"));
JsonArray jsonArray = root.getAsJsonArray();
JsonObject jsonObject1 = jsonArray.get(0).getAsJsonObject();
String dayOfWeek = jsonObject1.get("dayOfWeek").toString();
// 잭슨 라이브러리 사용 시
JsonFactory f = new JsonFactory();
ObjectMapper mapper = new ObjectMapper();
JsonParser jp = f.createJsonParser(getRowData);
// advance stream to START_ARRAY first:
jp.nextToken();
// and then each time, advance to opening START_OBJECT
while (jp.nextToken() == JsonToken.START_OBJECT) {
Map<String,Object> userData = mapper.readValue(jp, Map.class);
userData.get("dayOfWeek");
// process
// after binding, stream points to closing END_OBJECT
}
Android Volly 라이브러리를 최대한 활용하세요.JSON 응답을 각 클래스 객체에 매핑합니다.해당 응답 모델 개체에 대해 getter setter를 추가할 수 있습니다.그런 다음 일반 JAVA 개체와 같이 .operator를 사용하여 이러한 JSON 값/파라미터에 액세스할 수 있습니다.대응 처리가 매우 간단해집니다.
언급URL : https://stackoverflow.com/questions/7634518/getting-jsonobject-from-jsonarray
'programing' 카테고리의 다른 글
Wordpress: 미디어 라이브러리 그리드 모드 무한 로드 (0) | 2023.03.01 |
---|---|
반응 - DOM 렌더링 중에 로드 화면을 표시하시겠습니까? (0) | 2023.03.01 |
2개의 마이크로 서비스 간의 통신 (0) | 2023.03.01 |
CSS를 통한 인라인 이미지 표시 (0) | 2023.03.01 |
typescript: 오류 TS2693: 'Promise'는 유형을 나타낼 뿐이지만 여기서 값으로 사용되고 있습니다. (0) | 2023.03.01 |