Android使用simplejson解析JSON报错:String无法转为JSONObject
解决simplejson解析InputStream字符串时的类型转换异常
问题根源
你遇到的java.lang.String cannot be cast to org.json.simple.JSONObject异常,本质是从InputStream读取的JSON字符串格式不合法——大概率是字符串带了外层包裹的双引号(比如你提供的示例字符串是"{"Result":...}"),或者内部转义字符未正确处理,导致JSONParser解析后返回的是String类型而非JSONObject,强转自然失败。而直接赋值变量时你可能已经手动修正了这些格式问题,所以能正常解析。
修复步骤(Android按钮触发场景)
1. 正确读取并清洗InputStream中的JSON字符串
读取时要去掉多余的空白、外层双引号,并修正转义字符:
button.setOnClickListener(v -> { // 网络/IO操作必须在子线程执行(Android强制要求) new Thread(() -> { try (InputStream inputStream = /* 你的输入流来源 */; BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line.trim()); // 移除每行的换行、空格 } String rawJson = sb.toString(); // 清洗字符串:去掉外层双引号,修正内部转义的双引号 String cleanJson = rawJson; if (cleanJson.startsWith("\"") && cleanJson.endsWith("\"")) { cleanJson = cleanJson.substring(1, cleanJson.length() - 1); cleanJson = cleanJson.replace("\\\"", "\""); } // 2. 正常解析JSON JSONParser parser = new JSONParser(); JSONObject rootObj = (JSONObject) parser.parse(cleanJson); // 解析Result数组 JSONArray resultArr = (JSONArray) rootObj.get("Result"); JSONObject result = (JSONObject) resultArr.get(0); String trxCode = (String) result.get("trxCode"); String trxMsg = (String) result.get("trxMsg"); // 解析Table1数组 JSONArray tableArr = (JSONArray) rootObj.get("Table1"); JSONObject tableItem = (JSONObject) tableArr.get(0); String tnsNm = (String) tableItem.get("TNS_NM"); // 回到主线程更新UI runOnUiThread(() -> { // 示例:显示解析结果 // textView.setText("交易状态:" + trxCode); }); } catch (IOException | ParseException e) { e.printStackTrace(); runOnUiThread(() -> { // 显示错误提示 // Toast.makeText(getApplicationContext(), "解析失败", Toast.LENGTH_SHORT).show(); }); } }).start(); });
2. 核心注意事项
- Android中所有网络/IO操作必须放在子线程,否则会触发
NetworkOnMainThreadException,这里用了基础的Thread实现,也可以用Coroutine、AsyncTask等。 - 解析完成后必须通过
runOnUiThread回到主线程更新UI,Android不允许子线程操作UI。 - 可以将清洗后的
cleanJson复制到JSON校验工具验证格式是否正确,确保没有语法错误。
内容的提问来源于stack exchange,提问作者js u
相关产品推荐
相关产品推荐

