【问题标题】:How to parse multidimensional json array in java如何在java中解析多维json数组
【发布时间】:2014-03-17 22:26:35
【问题描述】:

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

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

我想解析上面的Json数组对象来得到条件,extra,userid。所以我用了下面的代码

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 lib?
  • 我认为错误信息很清楚。您希望通过将 object 转换为 string 得到什么结果(您确实意识到 enrollment_response 的值是一个对象?)?
  • 你这里的根本不是一个数组。它是一个 Json 对象,其中嵌套了另一个 Json 对象。
  • 我想获取condition、extra和userid的值
  • FYI org.json.simple 很可能是您可以选择的 worst JSON 解析库。请,请使用其他东西。 Jackson、Gson,甚至是旧的 json.org 库都好得多。

标签: java arrays json


【解决方案1】:

首先:不要使用您正在使用的 JSON 解析库。这太糟糕了。不,真的,可怕。这是一个古老的、笨拙的东西,它轻轻地包装了一个 Java rawtype Hashmap。它甚至不能将 JSON 数组作为根结构来处理。

使用JacksonGson,甚至是旧的json.org library

也就是说,修复您当前的代码:

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。

    【讨论】:

    • 我收到一条错误消息,因为“方法 getJSONObject(String) 未为 JSONObject 类型定义”
    • 您能否提供JSONObject 的完全限定类名。我假设您使用的是org.json 库。
    • @ShashankKadne 这是 org.json.simple,而且很糟糕。
    【解决方案3】:

    这可行,但请相信我:更改库。

    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,我收到一个错误,因为“方法 getJSONObject(String) 未定义 JSONObject 类型”
    • 正如其他回答者发布的那样,我们认为您使用的是 org.json 库。你能提供你正在使用的确切库吗?
    • @BrianRoach 我可以建议您切换标准和更多文档的 org.json 或 Jackson 吗?
    • @Enrichman 不是 OP;我指出他们正在使用什么库;)请参阅我的答案。
    • @BrianRoach 哈哈,对不起,你是对的!顺便说一句,从未见过如此糟糕的 JSON 库。我必须下载它才能理解它。
    猜你喜欢
    • 2022-01-19
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2017-02-24
    • 1970-01-01
    • 2014-08-05
    相关资源
    最近更新 更多