Ho deciso di utilizzare JSON.Semplice per analizzare Java nella mia applicazione, come indicato da GSON o Jackson, perché entrambi sembrano troppo complicati per le mie esigenze e sembravano aver bisogno di ulteriori file di classe per funzionare come previsto. Ho il seguente JSON:Utilizzo di JSON.Simple con oggetti e array nidificati
{
"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
}
I objs
matrice liste 9 articoli diversi, ma ho incluso un solo per semplicità. Devo ottenere has_more
, count
e id
entro objs
. Ho provato:
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);
}
Ma spara un errore di java.lang.NullPointerException
, quindi sto assumendo perché è annidato sotto response -> recs -> objs
non è sempre un valore. Sto anche seguendo un tutorial di qualche anno, quindi qualcosa potrebbe essere cambiato da allora. Se tu potessi spiegare cosa è sbagliato e un esempio di come risolverlo, lo apprezzerei molto, imparo vedendo.
EDIT: errore completa
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
puoi fornire lo stacktrace? –
@ GaneshChithambalamA.S. Aggiunto all'OP. – Novicode
Se sta lanciando un NPE, significa che l'oggetto 'idObj' potrebbe essere nullo. Sarebbe strano per 'get' gettare NPE. Potrebbe restituire null, ma non mi aspetterei che possa generare NPE. – Brian