programing

JSONAray에서 JSONObject 가져오기

testmans 2023. 3. 1. 09:41
반응형

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

반응형