Android Cordova插件中JS生成JSON转Java JSONArray报错求助
解决Cordova插件中JS JSON字符串转Java JSONArray的报错问题
我之前开发Cordova插件时也踩过类似的坑——明明看着是合法的JSON字符串,转JSONArray却报类型转换错误。咱们一步步来排查解决:
最常见的问题:字符串藏着格式猫腻
你看到的"["9784142605765949528",2869,264,7]"只是表面正确,实际可能存在这些隐形问题:
- 字符串前后带有空白字符(空格、换行、制表符等)
- 被额外的引号包裹(比如JS传递时被桥接层自动加了外层引号,实际值是
"[\"9784142605765949528\",2869,264,7]") - 内部引号被过度转义
对应的修复代码
先对字符串做清理处理,再尝试转换:
String rawStr = lwpd[4]; // 第一步:去掉前后空白字符 String cleanedStr = rawStr.trim(); // 第二步:如果外层被引号包裹,去掉并还原转义的引号 if (cleanedStr.startsWith("\"") && cleanedStr.endsWith("\"")) { cleanedStr = cleanedStr.substring(1, cleanedStr.length() - 1); cleanedStr = cleanedStr.replace("\\\"", "\""); } // 第三步:转换为JSONArray JSONArray jsonArray = new JSONArray(cleanedStr);
其次要排查:Cordova参数传递的类型偏差
有时候JS传过来的参数,在Cordova桥接层会自动转换类型,你以为拿到的是字符串,实际可能是其他类型?先打印参数的类型和原始值确认:
System.out.println("参数类型:" + lwpd[4].getClass().getName()); System.out.println("参数原始值:" + lwpd[4]);
如果输出类型不是java.lang.String,那说明JS那边的传递方式有问题,比如应该传字符串而非直接传数组(不过你说JS生成的是JSON字符串,大概率还是字符串,但确认一下更稳妥)。
备选方案:换用更兼容的JSON解析库
如果Android自带的org.json.JSONArray还是报错,可以试试Gson库,它对格式的兼容性更好:
// 先添加Gson依赖(如果项目里没加) // implementation 'com.google.code.gson:gson:2.10.1' import com.google.gson.Gson; import com.google.gson.JsonArray; Gson gson = new Gson(); JsonArray jsonArray = gson.fromJson(cleanedStr, JsonArray.class);
按上面的步骤排查,应该就能解决问题了!
内容的提问来源于stack exchange,提问作者DroidOS
相关产品推荐
相关产品推荐

