You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:34