本指南帮助您排查和解决 RPA 应用中常见的问题,特别是 JSON 解析错误。
处理脚本执行请求失败:SyntaxError:JSON Parse error:Unexpected character:
使用浏览器开发者工具查看实际发送的请求:
正确的 JSON 格式应该是:
{
"script": "console.log('Hello World');"
}
问题类型 | 错误示例 | 正确格式 |
---|---|---|
缺少引号 | { script: "test" } |
{ "script": "test" } |
不完整 JSON | { "script": "test" |
{ "script": "test" } |
特殊字符未转义 | { "script": "console.log("test")" } |
{ "script": "console.log(\"test\")" } |
换行符问题 | 包含未转义的换行符 | 使用 \n 转义 |
查看 Android Logcat 输出,寻找以下日志:
收到脚本执行请求,原始数据: [数据内容]
JSON解析失败,尝试其他解析方式: [错误信息]
处理后的脚本长度: [长度]
使用命令查看日志:
# 过滤RPA相关日志
adb logcat | grep -i "rpa\|script\|json"
# 或使用React Native命令
npx react-native log-android
检查内容编码:
Content-Type: application/json
代理模式测试: 如果直连失败,尝试使用代理模式:
确保 JavaScript 代码正确序列化数据:
// 正确的发送方式
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ script: scriptContent }),
});
我们已经改进了 HttpService.ts 中的 JSON 解析逻辑:
直接使用 curl 命令测试 API:
# 测试状态接口
curl -X GET http://[设备IP]:8080/status
# 测试脚本执行接口
curl -X POST http://[设备IP]:8080/execute-script \
-H "Content-Type: application/json" \
-d '{"script":"console.log(\"Hello World\");"}'
在出现问题时,可以临时启用详细日志:
在 HttpService.ts 中添加调试代码:
console.log('=== 调试信息 ===');
console.log('请求类型:', request.type);
console.log('请求URL:', request.url);
console.log('原始数据类型:', typeof request.postData);
console.log('原始数据长度:', request.postData ? request.postData.length : 0);
console.log(
'原始数据hex:',
request.postData
? Buffer.from(request.postData).toString('hex').substring(0, 100)
: 'null',
);
console.log('===============');
可能原因:
解决方案:
解决方案:
解决方案:
当遇到问题时,请收集以下信息:
# 查看Android日志
adb logcat | grep -E "(RPA|Script|JSON|Error)"
# 重启Metro服务器
npm start --reset-cache
# 清理并重新构建
cd android && ./gradlew clean && cd .. && npm run android
# 检查端口占用
netstat -an | grep 8080
netstat -an | grep 3002
记住:大多数 JSON 解析错误都是由于数据格式不正确或网络传输问题导致的。通过系统性 的排查,通常都能找到根本原因并解决问题。