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

Android中ShouldInterceptRequest返回JSON显示为字符串的问题

解决Android中ShouldInterceptRequest返回JSON显示为字符串的问题

我之前也碰到过一模一样的问题,核心原因就是Content-Type设置不符合标准,导致WebView没把返回内容识别成JSON对象,反而当成纯文本渲染了。

你之前用的text/json和application/javascript都不是JSON的标准MIME类型,正确的类型应该是application/json——这是IETF规定的JSON官方媒体类型,WebView对这个类型的解析逻辑更准确,能让前端正确识别为JSON对象而非字符串。

修正后的代码如下:

override fun shouldInterceptRequest(view: WebView, request: WebResourceRequest): WebResourceResponse? {
    val rows = Customer.fakeData(1)
    val st = Shared.jsonToStream(rows)
    // 替换为标准的JSON MIME类型
    return WebResourceResponse("application/json", "UTF-8", st)
}

另外还要注意几个细节:

  • 先确认你的jsonToStream方法生成的JSON是标准格式(比如正确的数组/对象结构、无语法错误),可以先把序列化后的字符串打印出来验证,避免因为JSON本身格式问题导致前端无法解析。
  • 如果前端是用AJAX请求这个资源,要确保前端代码没有错误地把响应当成纯文本处理(比如漏了调用JSON.parse())。
  • 检查数据流开头有没有多余的BOM(字节顺序标记),有些JSON序列化工具会自动添加BOM,这会破坏JSON结构,导致WebView无法正确解析,最终显示成纯文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:25:47