Postanowiłem użyć JSON.Simple do analizy Java w mojej aplikacji, jak w przypadku aplikacji GSON lub Jackson, ponieważ obie wydają się zbyt skomplikowane dla moich potrzeb i wydawało się, że potrzebują dodatkowej pliki klas do działania zgodnie z przeznaczeniem. Mam następujący JSON:Używanie JSON.Simple z zagnieżdżonymi obiektami i tablicami
{
"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
}
The objs
list tablicy 9 różnych przedmiotów, ale tylko włączone jeden dla prostoty. Muszę uzyskać has_more
, count
i id
z zakresu objs
. Próbowałem:
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);
}
Ale pożary błąd java.lang.NullPointerException
, więc jestem zakładając, ponieważ jest zagnieżdżone pod response -> recs -> objs
nie jest uzyskanie wartości. Podążam też za kilkuletnim tutorialem, więc od tego czasu mogło się coś zmienić. Jeśli mógłbyś wyjaśnić, co jest nie tak i jak to naprawić, byłbym bardzo wdzięczny, uczę się, widząc.
EDIT: Pełny błąd
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) | Iterator<JSONObject> iterator = objs.iterator();
ddns.DDNS.main (DDNS.java:7) | Just calls the method
czy możesz podać stacktrace? –
@ GaneshChithambalamA.S. Dodano go do OP. – Novicode
Jeśli wyrzuca NPE, oznacza to, że obiekt 'idObj' może być pusty. Byłoby dziwne, gdyby 'get' rzucił NPE. Może zwrócić wartość null, ale nie spodziewam się, że wyrzuci NPE. – Brian