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
相关产品推荐
相关产品推荐

