为什么JSONObject无法获取Android中嵌套字段的值?

为什么JSONObject无法获取Android中嵌套字段的值?

问题描述:

我正在构建一个从API获取天气数据的android应用程序。但是,API调用不适用于嵌套字段。该应用程序将整个JSON数据视为JSONObject。它适用于单个字段(例如:“结果”),但不适用于嵌套字段。这里是我的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)?在这种情况下,它会让你的生活更轻松。 –

JSON主要由对象(附{})和阵列(包围[])的。

因此,有必要使用JSONObject和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。 –