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

使用Volley从PHP向Android获取JsonArray时遇JSONException错误求助

解决Volley获取JSONArray时的JSON解析异常

嘿,你遇到的org.json.JSONException: Value <!-- of type java.lang.String cannot be converted to JSONObject错误,根源很明显:你的PHP接口返回的响应不是纯JSON格式——开头的<!--是HTML注释标记,它混进了原本应该是纯JSON的响应里,直接把解析器搞懵了。

从你贴的响应片段能看到,后面确实有正确的JSON结构,但前面的<!--破坏了整个响应的完整性,解析器自然没法识别这是合法的JSON。

下面是具体的修复步骤:

第一步:排查PHP代码的输出问题

首先得确保你的PHP代码只输出JSON,没有多余内容:

  • 检查PHP文件开头,<?php标签前不能有空格、换行或者<!--这类注释;
  • 看看代码里有没有用echo/print输出过调试信息、注释之类的非JSON内容;
  • 如果用了框架或模板,确认没有意外输出错误页面的HTML结构(很多PHP报错会被包裹在HTML注释里)。

第二步:让PHP输出纯净的JSON

修改你的PHP代码,确保最终只返回JSON数据,示例如下:

// 先关闭错误输出,防止报错信息混入JSON
error_reporting(0);
ini_set('display_errors', 0);

// 构建要返回的数据数组
$responseData = [
    "result" => [
        ["subject_name" => "Entrepreneurship", "percentage" => 1.2],
        ["subject_name" => "Advanced Computing Platform", "percentage" => 1.14]
    ]
];

// 设置响应头,告诉客户端这是JSON格式
header('Content-Type: application/json');

// 输出JSON,注意不要加任何额外字符
echo json_encode($responseData);

// 输出后立刻终止脚本,避免后续代码输出多余内容
exit;

小贴士:json_encode会自动处理浮点数的精度问题,不用手动写那些超长的小数位,既简洁又能避免不必要的格式问题。

第三步:验证PHP响应的纯净度

直接在浏览器里访问你的PHP接口URL,看看返回的内容是不是完全是JSON字符串,没有任何前缀、后缀或注释。比如应该是这样的:

{"result":[{"subject_name":"Entrepreneurship","percentage":1.2},{"subject_name":"Advanced Computing Platform","percentage":1.14}]}

如果还能看到<!--或者其他奇怪的字符,说明PHP代码还有地方没排查到,得再仔细找。

临时适配方案(不推荐,治标不治本)

如果暂时没法修改PHP代码,也可以在Volley端先过滤掉多余字符再解析:

@Override
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
    try {
        String rawResponse = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        // 过滤开头的HTML注释
        String cleanJson = rawResponse.replaceFirst("^<!--.*?-->", "");
        JSONArray jsonArray = new JSONArray(cleanJson);
        return Response.success(jsonArray, HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException | JSONException e) {
        return Response.error(new ParseError(e));
    }
}

不过还是建议优先修复PHP端的问题,毕竟保证接口返回纯净的JSON才是规范的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:35:28