Android 没有值时JSONObject解析错误
我有一个Android 没有值时JSONObject解析错误,android,json,jsonexception,Android,Json,Jsonexception,我有一个JSON,看起来像这样: { "notifications": { "0": { "id": "27429", "uID": "6967", "text": "Text 1" }, "1": { "id": "27317", "uID": "6967", "text": "Text 2" }, "2": { "id": "27315",
JSON
,看起来像这样:
{
"notifications": {
"0": {
"id": "27429",
"uID": "6967",
"text": "Text 1"
},
"1": {
"id": "27317",
"uID": "6967",
"text": "Text 2"
},
"2": {
"id": "27315",
"uID": "6967",
"text": "Text 3"
},
"3": {
"id": "27314",
"uID": "6967",
"text": "Text 4"
},
"4": {
"id": "27312",
"uID": "6967",
"text": "Text 5"
}
}
}
JSONObject rootObj = new JSONObject(result);
JSONObject jSearchData = rootObj.getJSONObject("notifications");
int maxlimit = 4;
for (int i = 0; i < maxlimit; i++) {
JSONObject jNotification0 = jSearchData.getJSONObject("" + i + "");
String text = jNotification0.getString("text");
System.out.println("Text: " + text);
}
for (int i = 0; i < jSearchData.length(); i++) {
JSONObject jNotification0 = jSearchData.getJSONObject("" + i + "");
String text = jNotification0.getString("text");
System.out.println("Text: " + text);
}
我从响应中取出“text”
字符串,因为我的代码如下所示:
{
"notifications": {
"0": {
"id": "27429",
"uID": "6967",
"text": "Text 1"
},
"1": {
"id": "27317",
"uID": "6967",
"text": "Text 2"
},
"2": {
"id": "27315",
"uID": "6967",
"text": "Text 3"
},
"3": {
"id": "27314",
"uID": "6967",
"text": "Text 4"
},
"4": {
"id": "27312",
"uID": "6967",
"text": "Text 5"
}
}
}
JSONObject rootObj = new JSONObject(result);
JSONObject jSearchData = rootObj.getJSONObject("notifications");
int maxlimit = 4;
for (int i = 0; i < maxlimit; i++) {
JSONObject jNotification0 = jSearchData.getJSONObject("" + i + "");
String text = jNotification0.getString("text");
System.out.println("Text: " + text);
}
for (int i = 0; i < jSearchData.length(); i++) {
JSONObject jNotification0 = jSearchData.getJSONObject("" + i + "");
String text = jNotification0.getString("text");
System.out.println("Text: " + text);
}
然后我的上述逻辑失败,我得到异常声明org.json.JSONException:No value for 1
我怎样才能克服这个问题
任何帮助都将不胜感激。您可以使用
rootObj.has(“1”)
或使用rootObj.optJSONObject(“1”)代码>
如果此对象具有名称映射,则前者返回true。后者返回按名称映射的值(如果它存在并且是JSONObject
),否则返回null
也可以通过rootObj内的键进行交互,方式如下:
Iterator<String> keys = jSearchData.keys();
while (keys.hasNext()) {
String key = keys.next();
JSONObject jNotification0 = jSearchData.optJSONObject(key);
if (jNotification0 != null) {
String text = jNotification0.getString("text");
String uID = jNotification0.getString("uID");
String id = jNotification0.getString("id");
}
}
迭代器keys=jSearchData.keys();
while(keys.hasNext()){
String key=keys.next();
JSONObject jNotification0=jSearchData.optJSONObject(键);
如果(jNotification0!=null){
String text=jNotification0.getString(“文本”);
字符串uID=jNotification0.getString(“uID”);
字符串id=jNotification0.getString(“id”);
}
}
编辑:这是错误的,我读到fast时没有意识到jSearchData是一个对象而不是数组。但在我看来,如果它实际上是一个数组而不是一个对象,那么if将更有意义
没有必要对4进行硬编码。只需获取数组的长度并在其中循环,如下所示:
{
"notifications": {
"0": {
"id": "27429",
"uID": "6967",
"text": "Text 1"
},
"1": {
"id": "27317",
"uID": "6967",
"text": "Text 2"
},
"2": {
"id": "27315",
"uID": "6967",
"text": "Text 3"
},
"3": {
"id": "27314",
"uID": "6967",
"text": "Text 4"
},
"4": {
"id": "27312",
"uID": "6967",
"text": "Text 5"
}
}
}
JSONObject rootObj = new JSONObject(result);
JSONObject jSearchData = rootObj.getJSONObject("notifications");
int maxlimit = 4;
for (int i = 0; i < maxlimit; i++) {
JSONObject jNotification0 = jSearchData.getJSONObject("" + i + "");
String text = jNotification0.getString("text");
System.out.println("Text: " + text);
}
for (int i = 0; i < jSearchData.length(); i++) {
JSONObject jNotification0 = jSearchData.getJSONObject("" + i + "");
String text = jNotification0.getString("text");
System.out.println("Text: " + text);
}
for(int i=0;i
正如您所看到的jSearchData
是JSONObject
。看起来像这样JSONObject jSearchData=rootObj.getJSONObject(“通知”)代码>我们如何在循环中使用它。而不是迭代i
迭代@Selvin我怎么能这样做,你能给我一个例子吗。伪代码:var-keys=jSearchData.keys();对于(key-in-keys){var-jNotificationX=jSearchData.getJSONObject(key);}
好的,谢谢你的回答,但是我不知道如何用当前的代码实现它。正如你们所看到的,我有for循环,我怎样才能在其中使用键呢?