将JSON.Simple与嵌套对象和数组一起使用

Nov*_*ode 5 java json

我已经决定使用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以及idobjs.我试过了:

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

Car*_*des 5

你必须从父进程中获取任何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,所以...你将解析一个空洞对象,如果你对这种方法感兴趣,请告诉我.