问题描述: 有如下json,如果 其中一个没有‘url’标签,但是我们还想要解析并让它的值为null
{
"lists": {
"site": [
{
"id": "1",
"name": "Alibaba",
"url": "www.alibaba.com"
},
{
"id": "2",
"name": "baidu",
"url": "www.baidu.com" --如果没有此键值对
}
]
}
}
我用的是net.sf.json.JSONObject 解析方法和apache下的包有所不同
JSONObject obj = JSONObject.fromObject("要解析的json字符串");
JSONArray obj2 = obj.getJSONArray("site");
for (int i = 0; i < obj2.size(); i++) {
JSONObject temp = JSONObject.fromObject(obj2.getString(i));
System.out.println("name:" + temp.getString("name"));
System.out.println("url:" + temp.getString("url"));
}
以上代码在name和url都存在的时候不会报错,但是如果缺失其中一个就会报错
net.sf.json.JSONException: JSONObject["url"] not found.
解决方法:
temp.optString("url"); 如果没有url,则返回"";
temp.optString("url","defaultValue"); 如果没有url,则返回defaultValue;