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

Android Capacitor JS插件返回数据JSON解析错误求助

问题排查与解决办法

错误根源定位

你遇到的Unexpected token o in JSON at position 1错误,本质是前端收到的内容无法被正确解析为JSON,结合你的代码,核心问题集中在以下几点:

1. 字符串特殊字符未转义

Java代码中对换行符的处理不符合JSON规范:

ret.put("response_text", val.replace("
", "\n"));

这里硬编码的换行符会直接被写入返回结果,而JSON要求字符串内的换行必须转义为\n,裸换行会破坏JSON结构。

2. 异常分支处理不当

catch块仅打印堆栈,仍返回空的JSObject,如果try块内出现异常(比如接口请求失败、Gson解析错误),前端会收到一个不完整的响应对象,进而触发解析错误。

3. 潜在的响应内容合法性问题

如果doPost返回的原始响应本身不是合法JSON,后续Gson解析会失败,最终导致返回内容异常。


具体修复步骤

1. 修复字符串转义逻辑

修改Java代码中response_text的赋值逻辑,确保特殊字符被正确转义:

// 转义换行、双引号等JSON敏感字符
ret.put("response_text", val.replace("\n", "\\n").replace("\"", "\\\""));

2. 正确处理异常分支

在catch块中用call.reject返回错误信息,而不是返回空对象:

catch (Exception e) {
    e.printStackTrace();
    // 明确向前端抛出错误
    call.reject("请求失败: " + e.getMessage());
    return; // 终止后续代码执行,避免返回无效结果
}

3. 验证原始响应合法性

在doPost方法中添加日志,确认接口返回的是合法JSON:

String doPost(String post_url, String bearer ) throws IOException {
    // ... 你的POST请求代码 ...
    System.out.println("接口原始响应: " + response_body); // 打印原始响应内容
    return response_body;
}

如果返回内容不是合法JSON,先修复接口输出,或在Java中做预处理。

4. 前端增加错误捕获

在JS代码中添加try-catch,方便排查插件调用异常:

try {
  var {response_text} = await URLPOST.post(request);
  console.log("response_text 1", response_text);
} catch (error) {
  console.error("插件调用错误:", error);
}

测试验证

先保留测试代码val = "result string here.";运行,确认错误消失后,再替换为实际的preview.getResult_preview()[0][0]进行真实场景测试。


内容的提问来源于stack exchange,提问作者D Liebman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:24:53