我试图在Android中解析一个动态的JSON字符串。这是一个非常简单的JSON结构。类似于以下内容:
{
"a": 1,
"b": 2,
"c": 3,
"d": 4,
"e": 5
}
但有时我没有得到一些钥匙。例如,键“b”可能会丢失。然后我的代码生成一个JSONParser异常。并且无法解析进一步的JSON字符串。
那么有没有办法忽略丢失的密钥?我试过optString();
,但只适用于String情况,那么JSONObject和JSONArray呢? optJSONArray()
和optJSONObject()
不起作用。
任何想法或解决方案?
答案 0 :(得分:1)
我认为最简单的方法就是使用 GSON!
您只需创建一个表示所需数据的普通旧Java对象(POJO),然后让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'