2016-11-29 1 views
-1

API에서 날씨 데이터를 가져 오는 Android 앱을 제작 중입니다. 그러나 API 호출 중첩 된 필드에 대해 작동하지 않습니다. 앱이 전체 JSON 데이터를 JSONObject로 가져옵니다. 그것은 단일 필드 (예 : "results")에서는 작동하지만 중첩 된 필드에서는 작동하지 않습니다. 여기 내 JSON 개체 코드는 다음과 같습니다JSONObject가 Android에서 중첩 된 필드의 값을 가져올 수없는 이유는 무엇입니까?

http://maps.googleapis.com/maps/api/geocode/json?components=postal_code:24728&sensor=false

제발 도와주세요 :

여기
JSONObject latlong = new JSONObject(json); 
    String lat = latlong.getInt("results.geometry.location.lat") + ""; 
    String lng = latlong.getInt("results.geometry.location.lng") + ""; 

는 JSON 데이터에 대한 링크입니다!

+0

[GSON] (https://github.com/google/gson)을 사용해 보시지 않겠습니까? 그것은 그러한 상황에서 여러분의 삶을 훨씬 쉽게 만듭니다. –

답변

1

JSON 주로 ([]로 둘러싸인) ({}로 둘러싸인) 목적 및 배열된다.

따라서 JSON 파일의 트리를 살펴 보려면 JSONObject와 JSONArray를 함께 사용해야합니다.

JSONObject 클래스와 JSONArray에는 모두 내부 객체 및 배열에 액세스하는 'getJSONObject'및 'getJSONArray'메서드가 있습니다.

그래서,이 같은 작업을해야합니다 :

JSONObject latLong = new JSONObject(json).getJSONArray("results") 
              .getJSONObject("geometry") 
              .getJSONObject("location"); 

    String lat = String.valueOf(latLong.getDouble("lat")); 
    String lng = String.valueOf(latLong.getDouble("lng")); 

은 그것을 시도하고 나 자신을 그것을 시도하지 않았기 때문에 필요한 경우 적절한 조정을합니다.

+0

네, 고맙습니다. 코드에서 변경해야 할 것은 JSONArray에서 getJSONObject를 호출 할 때 int를 전달해야한다는 것입니다. –

관련 문제