我有一个Android应用程序,它调用REST Web服务并获得JSON答案。 当我输入错误的参数时,我可以毫无问题地捕获错误,但有时JSON上的某些结果为空。我怎么能抓住这种情况呢?
我的Android代码:
try {
JSONObject jsonObj = new JSONObject(results);
JSONArray result = jsonObj.getJSONArray("result");
for (int i = 0; i < result.length(); i++) {
JSONObject c = result.getJSONObject(i);
String string04 = c.getString("string04");
String string05 = c.getString("string05");
TextView txt1 = (TextView)findViewById(R.id.textView1);
txt1.setText(string04);
TextView txt2 = (TextView)findViewById(R.id.textView2);
txt2.setText(string05);
JSONArray dest = c.getJSONArray("dest");
for (int o = 0; o < dest.length(); o++) {
JSONObject d = dest.getJSONObject(o);
JSONArray pred = d.getJSONArray("pred");
for (int u = 0; u < pred.length(); u++) {
JSONObject e = pred.getJSONObject(u);
String string13 = e.getString("string13");
TextView txt4 = (TextView)findViewById(R.id.textView4);
txt4.setText(string13);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
Log.d("error", e.getMessage());
}
一个好的JSON结果是这样的:
{
"result": [{
"string01": "104",
"string02": "104 - blablabla",
"string03": "104",
"string04": "blobloblo",
"string05": "blablabla",
"dest": [{
"pred": [{
"time": 1461348846,
"sec": 102,
"min": 1,
"string11": "514-String",
"string12": "Some String",
"string13": "Some other String",
"number": 0
}]
}]
}]
}
但有时,当没有数据显示时,我会得到这样的结果:
{
"result": [{
"string01": "104",
"string02": "104 - blablabla",
"string03": "104",
"string04": "blobloblo",
"string05": "blablabla",
"dest": [{"pred":[]}]
}]
}
答案 0 :(得分:0)
JSON
解析器具有“opt
”方法,如果匹配条件没有对象,则返回NULL
。这些方法与get方法类似。
例如:getJSONObject("column")
如果没有“throw
”的值,则会exception
column
optJSONObject("column")
只会返回NULL
值,如果它不存在的话。我个人觉得“opt
”方法在处理运行时可能缺少值的JSONs
时很方便。