2016-11-29 14 views
-1

APIから気象データを取得するアンドロイドアプリを構築しています。ただし、ネストされたフィールドのAPI呼び出しは機能しません。アプリケーションは、JSONオブジェクトとしてJSONデータ全体を取り込んでいます。単一のフィールド(例: "results")では有効ですが、ネストされたフィールドでは機能しません。ここに私のJSONオブジェクトコードは次のとおりです。ここでJSONObjectがAndroidでネストされたフィールドの値を取得できないのはなぜですか?

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

はJSONデータへのリンクです:

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

助けてください!

+0

[GSON](https://github.com/google/gson)を試してみませんか?このような状況では、あなたの人生はずっと楽になります。 –

答えて

1

JSONは、主にオブジェクト({}で囲まれた)と配列([]で囲まれた)で構成されています。

したがって、JSONオブジェクトとJSONArrayの組み合わせを使用してJSONファイルのツリーを調べる必要があります。

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を渡す必要があることだけです。 –

関連する問題