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

使用Volley调用REST API时String转JSONObject遇JSONException求助

问题分析

异常根源很清楚:你拿到的接口响应不是直接的JSON对象,而是被双引号包裹、内部引号做了转义处理的字符串形式JSON。从你贴的返回响应就能看出来:

"{\"Emp_name\":\"Abc1\",\"DOJ\":\"01-01-2021\",\"DOB\":\"10-01-1997\",\"Manager_name\":\"abc\",\"designation\":\"TL\"}"

这种格式本质是一个"包含JSON内容的字符串",直接用new JSONObject(response)解析自然会报错,因为它不符合JSON对象的语法规范。

解决方案

这里提供两种直接可行的修复方式:

方式一:手动清理响应字符串

在解析前先去掉首尾的双引号,同时替换掉内部的转义反斜杠:

@Override
public void onResponse(String response) {
    Toast.makeText(getApplicationContext(), "Response :" + response, Toast.LENGTH_LONG).show();
    try {
        // 清理响应:去掉首尾引号,替换转义字符
        String cleanedResponse = response.trim().substring(1, response.length() - 1).replace("\\\"", "\"");
        JSONObject jsonObject = new JSONObject(cleanedResponse);
        
        String empNAme = jsonObject.getString("Emp_name");
        String doj = jsonObject.getString("DOJ");
        String dob = jsonObject.getString("DOB");
        String Manager_name = jsonObject.getString("Manager_name");
        String designation = jsonObject.getString("designation");
        // 后续业务逻辑
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

方式二:两次JSON解析

先把整个响应解析成JSON字符串类型,再基于这个字符串解析出目标JSONObject:

@Override
public void onResponse(String response) {
    Toast.makeText(getApplicationContext(), "Response :" + response, Toast.LENGTH_LONG).show();
    try {
        // 第一次解析:提取出内部的JSON字符串
        JSONPrimitive jsonPrimitive = new JSONPrimitive(response);
        String jsonString = jsonPrimitive.getAsString();
        // 第二次解析:转成可用的JSONObject
        JSONObject jsonObject = new JSONObject(jsonString);
        
        String empNAme = jsonObject.getString("Emp_name");
        String doj = jsonObject.getString("DOJ");
        String dob = jsonObject.getString("DOB");
        String Manager_name = jsonObject.getString("Manager_name");
        String designation = jsonObject.getString("designation");
        // 后续业务逻辑
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
额外建议

如果后端可以调整,建议直接返回标准的JSON对象格式,不要把JSON内容包装成字符串返回,这样前端解析会更规范,从根源避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:46