使用org.json库解析根为数组的JSON响应报错该如何处理
问题原因与解决方案
你遇到的报错本质是org.json库识别到传入的字符串开头不符合JSON结构的语法要求,按以下顺序排查即可:
- 第一步:先打印原始
jsonString的完整内容,确认两个问题:- 是否存在不可见前缀(比如UTF-8 BOM头、多余的空格/换行/特殊字符),导致第一个字符不是
[ - 是否保留了HTML转义符(比如示例中的
"没有被还原为正常双引号")
- 是否存在不可见前缀(比如UTF-8 BOM头、多余的空格/换行/特殊字符),导致第一个字符不是
- 第二步:处理异常字符
如果是存在多余前缀,先截取从第一个[开始的子串:
如果是存在HTML转义符,先做转义还原:// 裁剪掉[之前的所有无效字符 int arrayStartPos = jsonString.indexOf('['); if (arrayStartPos != -1) { jsonString = jsonString.substring(arrayStartPos); }// 替换转义的双引号,其他转义符可按需补充替换规则 jsonString = jsonString.replace(""", "\""); - 第三步:正确解析JSON数组
你的响应最外层本身就是JSON数组,不需要转换为JSONObject,也不需要额外调用getJSONArray(0),处理完字符串后直接解析即可:JSONArray jsonArray = new JSONArray(jsonString); // 遍历数组读取元素示例 for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); int id = item.getInt("Id"); String name = item.getString("N"); // 按需读取其他字段 }
内容的提问来源于stack exchange,提问作者R. Tayyip Barbaros
相关产品推荐
相关产品推荐

