缺少JSON格式的密钥

时间:2015-09-08 07:47:24

标签: android json exception

我试图在Android中解析一个动态的JSON字符串。这是一个非常简单的JSON结构。类似于以下内容:

  {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
}    

但有时我没有得到一些钥匙。例如,键“b”可能会丢失。然后我的代码生成一个JSONParser异常。并且无法解析进一步的JSON字符串。

那么有没有办法忽略丢失的密钥?我试过optString();,但只适用于String情况,那么JSONObject和JSONArray呢? optJSONArray()optJSONObject()不起作用。

任何想法或解决方案?

3 个答案:

答案 0 :(得分:1)

我认为最简单的方法就是使用 GSON

您只需创建一个表示所需数据的普通旧Java对象(PO​​JO),然后让GSON完成剩下的工作。如果json字符串中不存在该值,则它将被设置为该类型的“default”(通常为null,但对于int为0,对于布尔值为false等)

要包含在Android Studio项目中:

compile 'com.google.code.gson:gson:2.2.4'

另请参阅this page,特别注意有关如何使用GSON的“对象示例”标题。

答案 1 :(得分:0)

您可以使用belo找到动态密钥

    String jsonString = "{ \"a\": 1, \"b\": 2, \"c\": 3, \"d\": 4, \"e\": 5 }";



try {
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONObject issueObj = new JSONObject(jsonString);
        Iterator iterator = issueObj.keys();
        while(iterator.hasNext()){
            String key = (String)iterator.next();

            Integer value = (Integer) issueObj.get(key);
            Log.d(TAG,"value: "+value);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

或者您可以使用GSON。

答案 2 :(得分:0)

您可以尝试使用GSON将该JSONObject转换为Map,如下所示:

        String json1 = "{\n" +
                "    \"a\": 1,\n" +
                "    \"b\": 2,\n" +
                "    \"c\": 3,\n" +
                "    \"d\": 4,\n" +
                "    \"e\": 5\n" +
                "}";
        Gson gson1 = new Gson();
        Type type1 = new TypeToken<Map<String, Integer>>(){}.getType();
        Map<String, Integer> myMap1 = gson1.fromJson(json1, type1);

build.gradle 文件中:

compile 'com.google.code.gson:gson:2.3.1'