解析时JSON不返回任何输出

时间:2014-12-05 07:39:39

标签: java android json parsing

我对JSON没有多少经验,所以问题可能有点微不足道,但我无法解决这个问题。 我有一个简单的JSON字符串,如:

["{\"__type:\"GeoPoint\",\"latitude\":51.165691,\"longitude\":10.451526}","{\"__type:\"GeoPoint\",\"latitude\":20.593684,\"longitude\":78.96288}"]

我想解析JSON并获取不同变量中的值。我已经实现了下面的代码片段,但它没有按预期工作。解析JSON后我看不到任何日志。 代码:

String jsonString = arg0.get(i).get(0).getJSONArray("tripPoints").toString();
                                Log.e("Json String", jsonString);
                                 JSONArray jsonarray;
                                try {
                                    jsonarray = new JSONArray(jsonString);
                                    for(int j=0; j<jsonarray.length(); j++){
                                        JSONObject obj = jsonarray.getJSONObject(j);

                                        String latitude = obj.getString("latitude");
                                        String longitude = obj.getString("longitude");

                                        Log.e("triplatitude", latitude);
                                        Log.e("triplongitude", longitude);
                                    }   
                                } catch (JSONException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }

如何从JSON获取数据?我哪里错了?

2 个答案:

答案 0 :(得分:1)

我假设您的json(在json数组中)没有转义并且有一点格式化如下所示:

[
 {
      "__type": "GeoPoint",
      "latitude": 51.165691,
      "longitude": 10.451526
  },
  {
      "__type": "GeoPoint",
      "latitude": 20.593684,
      "longitude": 78.96288
  }
]

我假设__type在您注释纬度和经度时会起作用并插入:obj.getString(“__ type”);但是你现在在纬度和经度上使用obj.getString,而它们不是字符串。

因此请用于纬度和经度:(编辑:这不是必需的,因为json解析器会自动生成一个String)

obj.getDouble("latitude");

修改

我实际上只是测试了你的代码,这很有效:

String jsonString = " [{\n" +
            "      \"__type\": \"GeoPoint\",\n" +
            "      \"latitude\": 51.165691,\n" +
            "      \"longitude\": 10.451526\n" +
            "  },\n" +
            "  {\n" +
            "      \"__type\": \"GeoPoint\",\n" +
            "      \"latitude\": 20.593684,\n" +
            "      \"longitude\": 78.96288\n" +
            "  }]";

    JSONArray jsonarray;
    try {
        jsonarray = new JSONArray(jsonString);
        for(int j=0; j<jsonarray.length(); j++){
            JSONObject obj = jsonarray.getJSONObject(j);

            String latitude = obj.getString("latitude");
            String longitude = obj.getString("longitude");

            Log.e("triplatitude", latitude);
            Log.e("triplongitude", longitude);
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 1 :(得分:1)

您的JSON数组不包含有效的JSON对象。删除\转义字符,最终会得到这个,这是无效的JSON:

[
    "{"__type:"GeoPoint","latitude":51.165691,"longitude":10.451526}",
    "{"__type:"GeoPoint","latitude":20.593684,"longitude":78.96288}"
]

首先尝试修复JSON,然后查看这是否解决了您的问题。您可以使用JSONLint来确保JSON有效。

基本上你的JSON应该是这样的:

[
    {
        "__type": "GeoPoint",
        "latitude": 51.165691,
        "longitude": 10.451526
    },
    {
        "__type": "GeoPoint",
        "latitude": 20.593684,
        "longitude": 78.96288
    }
]

编辑1

似乎有点混乱。问题是以下是JSON术语中的字符串:

"{"__type:"GeoPoint","latitude":51.165691,"longitude":10.451526}"

我们需要一个对象,因此我们从开头和结尾删除",将其转换为以下内容:

{"__type:"GeoPoint","latitude":51.165691,"longitude":10.451526}

这是无效的JSON。我们要解决此问题的方法是在"之后添加__type。现在它看起来像这样:

{"__type":"GeoPoint","latitude":51.165691,"longitude":10.451526}

最后它有效。您需要找到一种方法来修复源代码中的JSON。什么是arg0对象以及它从何处获取数据?

编辑2

如果您无法在源代码中修复JSON,则以下快速入侵应适用于此案例:

jsonString = jsonString.replace("__type", "__type\"")
        .replace("\"{", "{")
        .replace("}\"", "}")
        .replace("\\\"", "\"");