0

示例 JSON 页面 http://maps.googleapis.com/maps/api/geocode/json?latlng=51.155455,-0.165058&sensor=true

@SuppressLint("NewApi")
public void readAndParseJSON(String in) {
    try {
        JSONObject reader = new JSONObject(in);
        // This works and returns address
        JSONArray resultArry = reader.getJSONArray("results");
        String Address = resultArry.getJSONObject(1).getString("formatted_address").toString();
        Log.e("Address", Address);
        // Trying to get PostCode on code below - this is not working (log says no value at address components)
        JSONArray postCodeArray  = reader.getJSONArray("address_components");
        String postCode =  postCodeArray.getJSONObject(1).getString("long_name").toString();
        Log.e("PostCode", postCode );

此代码正确返回地址。如何获取位于 address_components 内的邮政编码 long_name?

解决方案 我必须获取每个数组,然后获取邮政编码值。我正在使用值 7,因为它是 JSONObject,其邮政编码存储在“long_name”字段中。

JSONObject readerJsonObject = new JSONObject(in);
 readerJsonObject.getJSONArray("results");
 JSONArray resultsJsonArray = readerJsonObject.getJSONArray("results");
 JSONArray postCodeJsonArray = resultsJsonArray.getJSONObject(0).getJSONArray("address_components");
 String postCodeString =  postCodeJsonArray.getJSONObject(7).getString("long_name").toString();         
 Log.e("TAG", postCodeString);

希望有帮助。

4

4 回答 4

0

解决方案 需要获取每个数组,然后获取邮政编码值。使用值 7,因为它是在“long_name”字段中存储邮政编码的 JSONObject。

JSONObject readerJsonObject = new JSONObject(in);
 readerJsonObject.getJSONArray("results");
 JSONArray resultsJsonArray = readerJsonObject.getJSONArray("results");
 JSONArray postCodeJsonArray = resultsJsonArray.getJSONObject(0).getJSONArray("address_components");
 String postCodeString =  postCodeJsonArray.getJSONObject(7).getString("long_name").toString();         
 Log.e("TAG", postCodeString);

希望有帮助。

于 2014-01-21T00:20:32.953 回答
0

您的问题是,resultsJSONArray包含一个JSONObject由几个孩子组成的孩子:"address_components""formatted_address""geometry""types"。该result数组实际上包含许多这样的对象,但现在让我们只关注第一个孩子。

仔细查看您的代码。有了这条线:

JSONArray resultArry = reader.getJSONArray("results");

你得到了整个results. 稍后,您再次调用相同的方法:

JSONArray postCodeArray  = reader.getJSONArray("address_components");

但是您要求"address_components"读者提供,我不希望您会找到任何东西(之前已经阅读了整个结果。)您应该使用JSONArray之前已经获得的内容,因为它已经包含整个结果.

尝试类似:

JSONObject addressComponents = resultArry.getJSONObject(1).getJSONObject("address_components");
String postCode = addressComponents.getString("long_name");

注意:我不知道你为什么要挑出 JSONObject #1(而不是 0,它是第一个,或者它们中的任何其他),我也不确定你为什么将字符串命名为 postCode。所以如果我误解了你的意图,我很抱歉。

于 2014-01-20T19:08:54.753 回答
0
reader.getJSONObject(1).getJSONArray("address_components");
于 2014-01-20T19:02:08.553 回答
0

很难找到错误......因为一切看起来都很好。当您制作 json.put("address_components", something); 时可能会存在问题。

所以我的建议是在这一行设置一个断点

 JSONArray postCodeArray  = reader.getJSONArray("address_components");

o 在 logcat 中显示 json

Log.d("Simple", reader.toString());

然后将您的 json 粘贴到此网页中以查看更漂亮

http://jsonviewer.stack.hu/

并检查所有密钥是否存储良好。

于 2014-01-20T21:06:17.137 回答