我已经决定使用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
}
Run Code Online (Sandbox Code Playgroud)
该objs阵列列出了9个不同的项目,但为了简单起见,我只包括了一个.我需要has_more,count以及id内objs.我试过了:
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);
}
Run Code Online (Sandbox Code Playgroud)
但它会触发一个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
Run Code Online (Sandbox Code Playgroud)
ddns.Net.getId(Net.java:46)| Iterator<JSONObject> iterator = objs.iterator();
ddns.DDNS.main(DDNS.java:7)|Just calls the method
你必须从父进程中获取任何json对象,看看这段代码(我试过并且工作):
public static void main(String[] args) throws IOException, ParseException {
JSONParser jsonParser = new JSONParser();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("json.json");
InputStreamReader reader = new InputStreamReader(is);
JSONObject result = (JSONObject) jsonParser.parse(reader);
JSONObject response = (JSONObject) result.get("response");
JSONObject recs = (JSONObject) response.get("recs");
boolean hasMore = (Boolean) recs.get("has_more");
JSONArray objs = (JSONArray) recs.get("objs");
System.out.println(recs);
System.out.println("has more " + hasMore);
Iterator objIter = objs.iterator();
int i = 0;
while (objIter.hasNext()) {
i++;
System.out.println(String.format("obj %d: %s", i, objIter.next()));
}
}
Run Code Online (Sandbox Code Playgroud)
还有另一种方法对我来说更简单,就是创建一个具有相同结构的Java Bean,所以...你将解析一个空洞对象,如果你对这种方法感兴趣,请告诉我.