gpt4 book ai didi

arrays - 如何检查Java中的JSONArray是否为空?

转载 作者:行者123 更新时间:2023-12-03 11:35:10 24 4
gpt4 key购买 nike

我正在开发一个 android 应用程序,它获取名为“WebUntis”的网络服务的 json 内容。我得到的 Json 内容如下:

{"jsonrpc":"2.0","id":"req-002",
"result":[
{"id":125043,"date":20110117,"startTime":800,"endTime":850,
"kl":[{"id":71}],
"te":[{"id":23}],
"su":[{"id":13}],
"ro":[{"id":1}]},
{"id":125127,"date":20110117,"startTime":1055,"endTime":1145,
"kl":[{"id":71}],
"te":[{"id":41}],
"su":[{"id":19}],
"ro":[{"id":31}]},
...]}

正如您在结果数组中看到的,还有其他数组,如“kl”、“su”和“ro”

我正在获取这些数组的内容,然后将它们存储在一个数组列表中。
但是当这些数组之一为空时,例如;
    {"jsonrpc":"2.0","id":"req-002",
"result":[
{"id":125043,"date":20110117,"startTime":800,"endTime":850,
"**kl":[]**,
"te":[{"id":23}],
"su":[{"id":13}],
"ro":[{"id":1}]},
{"id":125127,"date":20110117,"startTime":1055,"endTime":1145,
"kl":[{"id":71}],
"te":[{"id":41}],
"su":[{"id":19}],
"ro":[{"id":31}]},
...]}

我总是收到错误 IndexOutOfRangeException ,
但我总是告诉它不应该使用空数组,这是我尝试过的:
 JSONObject jsonResult = new JSONObject(s);
// Get the result object
JSONArray arr = jsonResult.getJSONArray("result");

for (int i = 0; i < arr.length(); i++) {
JSONObject c = arr.getJSONObject(i);
anfangStunde[i] = c.getString("startTime");
endeStunde[i] = c.getString("endTime");

// get the jsonarrays (kl, su, ro)
kl = c.getJSONArray("kl");
su = c.getJSONArray("su");
ro = c.getJSONArray("ro");

// check if kl is not null
if(kl != null){
klassenID[i] = kl.getJSONObject(0).getString("id");
}
if (klassenID[i] != null) {
klasse = webuntis.klassenMap.get(klassenID[i]);
Log.d("ID und Klasse=", "" + klassenID[i] + ";" + klasse);
}
// get th ids
fachID[i] = su.getJSONObject(0).getString("id");
if (fachID[i] != null) {
fach = webuntis.faecherMap.get(fachID[i]);
Log.d("ID und Fach=", "" + fachID[i] + ";" + fach);
}

// "Start;Ende;Klasse;Fach;Raum" store in arraylist
webuntis.stundenPlan.add(anfangStunde[i] + ";" + endeStunde[i] + ";" + klasse + ";" + fach);
// Write Data into a file for offline use:
}

谁能帮我 ?

最佳答案

如果在文件 中定义了数组但是 是空的,例如:

...
"kl":[]
...

然后 getJSONArray("kl")将返回一个空数组,但对象不是 null .然后,如果你这样做:
kl = c.getJSONArray("kl");
if(kl != null){
klassenID[i] = kl.getJSONObject(0).getString("id");
}
kl不是 nullkl.getJSONObject(0)将抛出异常 - 数组中没有第一个元素。

相反,您可以查看 length() ,例如:
kl = c.getJSONArray("kl");
if(kl != null && kl.length() > 0 ){
klassenID[i] = kl.getJSONObject(0).getString("id");
}

关于arrays - 如何检查Java中的JSONArray是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28807919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com