【问题标题】:JSON parsing error with Java org.json JSONObject not found未找到 Java org.json JSONObject 的 JSON 解析错误
【发布时间】:2021-02-09 13:56:57
【问题描述】:

我有一个我想用 org.json 库解析的 JSON 字符串:

JSONObject jason_clean = new JSONObject(unzipped);
        JSONArray array = jason_clean.getJSONArray("setlists");
        for (int i=0; i< array.length(); i++) {
            JSONObject tempObject = array.getJSONObject(i);
            JSONObject meta_object = tempObject.getJSONObject("meta");
            String bank_name = meta_object.getString("name");
            System.out.println(bank_name);

            JSONArray presets_array = tempObject.getJSONArray("presets");
            System.out.println("presets_array.length(): "+presets_array.length());
            
            for (int j=0; j< presets_array.length(); j++) {
                JSONObject temp_preset_Object = presets_array.getJSONObject(j);
                //if (temp_preset_Object.has("meta")) {
                JSONObject meta_preset_object = temp_preset_Object.getJSONObject("meta");
                String preset_name = meta_preset_object.getString("name");
                System.out.println("BANK: "+i+" - "+bank_name+" || "+j+" - "+preset_name);
                //}
                
            }
        
        }

我得到了许多预期的结果,但它因以下错误堆栈而停止:

Exception in thread "main" org.json.JSONException: JSONObject["meta"] not found.
    at org.json.JSONObject.get(JSONObject.java:573)
    at org.json.JSONObject.getJSONObject(JSONObject.java:766)
    at ZLibCompression.main(ZLibCompression.java:68)

然后我尝试测试是否有“元”对象(在上面的代码中注释掉)。现在解析器运行到字符串的末尾,但缺少许多条目。 (不仅在那个时候,它以前停止过。) 我已经使用软件验证器验证了 JSON 字符串(并且我的 python 脚本可以以预期的方式处理整个字符串。) 我是 JSON 新手,所以我不知道它是否可能是解析器问题,或者我的代码中是否有错误来处理这个特定的字符串。 I've linked the JSON-String-file here.(8.6 MB)

我添加了格式化的output of successfully parsed elements

这里有一些解析或未解析的 JSON 字符串的 sn-ps(未找到 JSONObject["meta"]):

例外(JSON 字符串中的第 213784 行):

{
     "device" : 2162692,
     "device_version" : 50397184,
     "meta" : {
      "build_sha" : "39f7f9a",
      "name" : ""
     },

无一例外(JSON 字符串中的第 304922 行):

{
     "device" : 2162692,
     "device_version" : 50397184,
     "meta" : {
      "build_sha" : "v2.81-16-gbdc0fd8",
      "name" : ""
     },

例外(JSON 字符串中的第 176330 行):

{
     "device" : 2162692,
     "device_version" : 50397184,
     "meta" : {
      "build_sha" : "561c612",
      "name" : "SLAP Punch"
     },

【问题讨论】:

    标签: java json


    【解决方案1】:

    这里失败了 --> JSONObject meta_preset_object = temp_preset_Object.getJSONObject("meta");

    在 --- USER 4 下的预设没有元。

        "meta": {
            "name": "USER 4"
        },
        "presets": []
    

    您的预设应该具有与其他所有类似的数据:

    “设备”:, “设备版本”:, “元”:{ “build_sha”:“”, “姓名” : ”” },

    【讨论】:

    • 谢谢!哦,是的,我已经监督了这部分。如果不处理这些空的预设数组,那也不会那么糟糕。但是解析器在第 213784 行第一次停止,在那里我有一个“名称”对象。我想,当时可能是空引号,但在其他地方,空标记的处理没有错误(例如 304922)。另一个错误示例是在第 176330 行 - 给出的数据与其他处理过的数据非常相似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多