【发布时间】: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"
},
【问题讨论】: