我决定在我的应用程序中使用JSON.Simple来解析Java,而不是GSON或Jackson,因为它们似乎对我的需求过于复杂,并且似乎需要额外的类文件才能按预期工作。我有以下JSON:
但是它会出现一个
编辑:完整的错误信息。
{
"request":{
"act":"rec_load_all",
"email":"Redacted",
"tkn":"Redacted",
"a":"rec_load_all",
"z":"Redacted"
},
"response":{
"recs":{
"has_more":false,
"count":9,
"objs":[{
"rec_id":"1385442465",
"rec_hash":"1825780e334bcd831034bd9ca62",
"zone_name":"Redacted",
"name":"Redacted",
"display_name":"Redacted",
"type":"A",
"prio":null,
"content":"Redacted",
"display_content":"Redacted",
"ttl":"1",
"ttl_ceil":86400,
"ssl_id":null,
"ssl_status":null,
"ssl_expires_on":null,
"auto_ttl":1,
"service_mode":"1",
"props":{
"proxiable":1,
"cloud_on":1,
"cf_open":0,
"ssl":0,
"expired_ssl":0,
"expiring_ssl":0,
"pending_ssl":0,
"vanity_lock":0
}
}]
}
},
"result":"success",
"msg":null
}
objs
数组列出了9个不同的项目,但出于简单起见,我仅包含了一个。我需要获取has_more
、count
和objs
内的id
。我尝试过:
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(responseString);
JSONArray objs = (JSONArray) jsonObject.get("objs");
Iterator<JSONObject> iterator = objs.iterator();
while (iterator.hasNext()) {
JSONObject idObj = (JSONObject) iterator.next();
String id = (String) idObj.get("rec_id");
System.out.println(id);
}
但是它会出现一个
java.lang.NullPointerException
错误,所以我假设是因为它嵌套在response -> recs -> objs
下没有得到值。我也遵循了几年前的教程,所以可能有些改变了。如果你能解释一下问题并且提供一个修复的例子,我将非常感激,我通过看到学习。编辑:完整的错误信息。
Exception in thread "main" java.lang.NullPointerException
at ddns.Net.getId(Net.java:46)
at ddns.DDNS.main(DDNS.java:7)
Java Result: 1
ddns.Net.getId(Net.java:46) | 迭代器<JSONObject> iterator = objs.iterator();
ddns.DDNS.main(DDNS.java:7) | 仅调用该方法
idObj
对象可能为null。get
抛出NPE是很奇怪的。 它可能返回null,但我不希望它抛出NPE。 - Engineer2021