如何在Java中解析多维JSON数组

5

我有一个二维JSON数组对象,如下所示:

{"enrollment_response":{"condition":"Good","extra":"Nothig","userid":"526398"}} 

我想解析上述Json数组对象以获取条件、额外信息和用户ID。因此,我使用了以下代码。
JSONParser parser = new JSONParser();

    try {

        Object obj = parser.parse(new FileReader("D:\\document(2).json"));

        JSONObject jsonObject = (JSONObject) obj;

        String name = (String) jsonObject.get("enrollment_response");
        System.out.println("Condition:" + name);

        String name1 = (String) jsonObject.get("extra");
        System.out.println("extra: " + name1);



    } catch (FileNotFoundException e) { 
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }

它抛出了一个错误,如下:
"Exception in thread "main" java.lang.ClassCastException:
org.json.simple.JSONObject cannot be cast to java.lang.String at
com.jsonparser.apps.JsonParsing1.main(JsonParsing1.java:22)"

请有人帮忙解决这个问题。


你使用哪个 JSON 库? - Weibo Li
2
我认为错误信息已经很清楚了。你希望通过将一个 object 转换成 string 来得到什么结果呢(你应该意识到 enrollment_response 的值是一个对象)? - Felix Kling
1
你这里的东西根本不是一个数组,而是一个嵌套了另一个Json对象的Json对象。 - Henry
我想获取条件(condition)、额外信息(extra)和用户ID(userid)的值。 - Test1234
FYI,org.json.simple 可能是你可能选择的最糟糕的 JSON 解析库。请,请使用其他东西。Jackson、Gson,甚至旧的 json.org 库都要好得多。 - Brian Roach
3个回答

3

首先,不要使用你正在使用的JSON解析库。它很糟糕。真的,非常糟糕。它是一个老旧而且脆弱的东西,轻微地包装了Java原始类型Hashmap。它甚至不能处理JSON数组作为根结构。

使用JacksonGson,或者甚至是旧的json.org库

话虽如此,为了修复您当前的代码:

JSONObject enrollmentResponseObject = 
    (JSONObject) jsonObject.get("enrollment_response");

这将获取内部对象。现在你可以提取内部字段:

String condition = (String) enrollmentResponseObject.get("condition");

等等,整个库只是扩展了一个Hashmap(没有使用泛型),让你自己找出并转换为适当的类型。


2

以下内容:

String name = (String) jsonObject.get("enrollment_response");

应该是

String name = jsonObject.getJSONObject("enrollment_response").getString("condition");

enrollment_response 的值是一个 Json。


我收到一个错误信息,内容为“JSONObject类型未定义getJSONObject(String)方法”。 - Test1234
你能提供JSONObject的完全限定类名吗?我假设你正在使用org.json库。 - Shashank Kadne
1
@ShashankKadne 它是 org.json.simple,而且它很糟糕。 - Brian Roach

0

这个可以用,但相信我:换个库吧。

JSONObject jsonObject = (JSONObject) obj;

JSONObject name = (JSONObject) jsonObject.get("enrollment_response");
System.out.println("Condition:" + name);

String name1 = (String) name.get("extra");
System.out.println("extra: " + name1);

嗨,enrichman,我遇到了一个错误:“The method getJSONObject(String) is undefined for the type JSONObject”。 - Test1234
正如另一个回答者所说,我们认为您正在使用org.json库。您能提供您正在使用的确切库吗? - Enrichman
@BrianRoach,我可以建议您切换到标准且更有文档支持的org.json或Jackson吗? - Enrichman
@Enrichman 我不是原帖作者,我只是指出他们正在使用的库。请看我的回答。 - Brian Roach
@BrianRoach 哈哈哈,抱歉,你是对的!顺便说一句,我从没见过这么糟糕的 JSON 库。我不得不下载它才能理解它。 - Enrichman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接