2017-12-20 25 views
0

API에서 내 앱에 대한 정보를 가져와야합니다. 문제는 API 응답은 다음 형식의 JSON입니다 :Java Android에서 중첩 JSON에서 데이터를 가져 오는 방법

{ 
 
    "jsonapi":{ 
 
     "data":[ 
 
     { 
 
      "id":"id_id", 
 
      "name":{ 
 
       "en":"nombre en ingles", 
 
       "es":"nombre en español" 
 
      }, 
 
      "company":{ 
 
       "id":"id_company", 
 
       "name":"nombre company" 
 
      }, 
 
      "city":{ 
 
       "id":"id_city", 
 
       "name":{ 
 
        "en":"nombre en ingles ciudad", 
 
        "es":"nombre en español ciudad" 
 
       } 
 
      }, 
 
      "province":{ 
 
       "id":"id_province", 
 
       "name":{ 
 
        "en":"nombre en ingles provincia", 
 
        "es":"nombre en español provincia" 
 
       } 
 
      } 
 
     }, 
 
     { 
 
      "id":"id_id2", 
 
      "name":{ 
 
       "en":"nombre en ingles 2", 
 
       "es":"nombre en español 2" 
 
      }, 
 
      "company":{ 
 
       "id":"id_company 2", 
 
       "name":"nombre company 2" 
 
      }, 
 
      "city":{ 
 
       "id":"id_city 2", 
 
       "name":{ 
 
        "en":"nombre en ingles ciudad 2", 
 
        "es":"nombre en español ciudad 2" 
 
       } 
 
      }, 
 
      "province":{ 
 
       "id":"id_province 2", 
 
       "name":{ 
 
        "en":"nombre en ingles provincia 2", 
 
        "es":"nombre en español provincia 2" 
 
       } 
 
      } 
 
     }, 
 
     { 
 
      "id":"id_id 3", 
 
      "name":{ 
 
       "en":"nombre en ingles 3", 
 
       "es":"nombre en español 3" 
 
      }, 
 
      "company":{ 
 
       "id":"id_company 3", 
 
       "name":"nombre company 3" 
 
      }, 
 
      "city":{ 
 
       "id":"id_city", 
 
       "name":{ 
 
        "en":"nombre en ingles ciudad 3", 
 
        "es":"nombre en español ciudad 3" 
 
       } 
 
      }, 
 
      "province":{ 
 
       "id":"id_province 3", 
 
       "name":{ 
 
        "en":"nombre en ingles provincia 3", 
 
        "es":"nombre en español provincia 3" 
 
       } 
 
      } 
 
     } 
 
     ] 
 
    }, 
 
    "city":{ 
 
     "latitude":"-333", 
 
     "longitude":"111" 
 
    } 
 
}

내가 JSON에서 정보를 얻을 알고있는 유일한 방법이 된 JSONObject 함께,하지만 난 object.getString("name")을 할 경우 내가 무엇을 할 도망? 원인 "이름"속성은 모든 곳에 있습니다. object.getString("data").getString("name")과 같은 작업을 수행 할 수 있습니까? 그러나 그렇다면 여전히 데이터 내부에 "이름"속성이 많이있는 것과 같은 문제가 발생합니다.

다른 JSON 안에 JSON이있을 때 특정 속성을 가져 오는 방법이 있습니까? 그렇다면 어떻게?

나는 이것이 GSON으로 할 수 있는지, 나는 안드로이드에서 새로운 것인가, 이것은 나의 연구를위한 프로젝트를위한 것이고, 나는 JSONObject와 JSONArray를 사용하는 방법을 간신히 알고있다. 그래서 나는 길을 잃었다! 적어도 이것이 가능하면 도움이 필요합니다.

미리 감사드립니다. :)

+1

JSON이 아닌 유효한 JSON을 공유 할 수 있습니까 – R2R

+0

[this] (http://www.jsonschema2pojo.org/)와 같은 일부 플러그인 또는 온라인 사이트를 사용하여 pojo를 빌드하십시오 (더 쉽고 시간이 덜 걸리기 때문에). [gson] (https://github.com/google/gson)을 사용하여 데이터를 간단하게 매핑하십시오. 그것이 내가하는 방법입니다. – Simo

답변

0

'이름'값을 사용합니다. 여기에서 JsonObject 정의와 쿼리 구조에 대해 읽을 수 있습니다. https://developer.android.com/reference/org/json/JSONObject.html

예제 JSON에서 특정 속성 값을 검색하는 방법에 대한 간단한 스텁이 있습니다.

JSONObject mainObject = new JSONObject(json_data_in_a_string); 
JSONObject jsonAPI = mainObject.getJSONObject("jsonapi"); 
JSONArray array = (JSONArray)jsonAPI.get("data"); 

for (int i = 0; i < array.length(); i++) { 

    JSONObject childObject = array.getJSONObject(i); 
    String id = childObject.getString("id"); 

    JSONObject name = childObject.getJSONObject("name"); 
    String name_en= name.getString("en"); 
    String name_es = name.getString("es"); 

    JSONObject company = childObject.getJSONObject("company"); 
    String company_id = company.getString("id"); 
    String company_name = company.getString("name"); 

} 

또한 JSON에서 값을 쉽게 읽을 수있는 POJO를 만들 수 있습니다. 몇 가지 도구는 JSON을 확인, POJO 클래스를 생성하는 방법에 대한 온라인 등이 있습니다

다음

내가 사용하는 몇 가지 -

http://www.jsonschema2pojo.org/

http://jsonviewer.stack.hu/

https://jsonlint.com/

+0

정말 고마워요 !! 이것은 효과가 있었다 !! :) – gleba

0

여기서 전체 문서는 JSONObject의 값을 갖는 jsonapi 이름의 키 쌍 값을 갖는 JSONObject입니다. 이름 jsonapi

JSONObject jo = (JSONObject) obj; 
JSONObject jsonApi = (JSONObject)jo.get("jsonapi"); 

그런 다음이 JSON 물체로 JSONObject을 가져 것은 array of JSON objects을 보유하고 키 data와 키 쌍의 값을 갖는다.

JSONArray array = (JSONArray)jsonAoi.get("data"); 

은 이제 JSONArray의 각 JSONObject을 얻을 수있는 배열을 iterate 각 당신이 당신의 값과 같은 name, city, company을 얻을 수있는 개체를 형성 할 수있다.

https://jsonlint.com/

나중에에서 분석하여 JSON에 대한 POJO 나 모델 클래스를 만듭니다 : 그것을 사용 올바른지

0

먼저 제대로 JSON을 구문 분석하고 확인

사용 GSON보다 http://pojo.sodhanalibrary.com/

Json을 파싱하기 위해 :

ResponseData response = gson.fromJson(jsonString, ResponseData.class); 
응답에서 모든 값에 액세스 할 수있는 것보다

입니다.

나는 당신의 JSON이 매우 중첩으로 JsonArray과 된 JSONObject를 사용하여 기본 JSON 파싱을 보였다 didnt한다. 그래서 그것의 더 나은 당신이 된 JSONObject를 조회하는 방법에 따라 달라집니다거야 GSON