Laravel API返回带双引号的数值,求助原因及解决方法
Laravel API响应数值被双引号包裹问题排查与解决
最近碰到个头疼的问题:Laravel API返回的数值居然被双引号包裹了,导致前端处理时完全不符合预期,折腾了好一会儿才解决,跟大家分享下过程:
先说明下我的项目环境:
- Laravel版本:5.6.12
- PHP版本:7.1
- Vue.js版本:2.5
- 数据库:MySQL 5.7(使用mysqlnd驱动)
从服务器接收的响应截图如下:
API响应异常截图
我的API响应代码其实很常规,就是标准的返回JSON格式:
$data = ['message' => 'Hello']; return response()->json($data, 200);
问题根源
折腾半天终于搞明白,核心原因是响应被重复序列化了!大概率是项目里某个全局中间件或者自定义中间件,对已经是JSON格式的响应做了二次json_encode处理。比如中间件里写了类似这样的错误代码:
// 错误示例:二次编码导致内容被双引号包裹 return response()->json($response->getContent());
原本response()->json()已经把数组转成了JSON字符串,结果中间件又把这个字符串当成普通内容再次JSON编码,自然就会被双引号整个包裹起来。
解决方法
- 检查项目的中间件配置(
app/Http/Kernel.php里的$middleware和$middlewareGroups),定位到对响应做额外处理的中间件。 - 把中间件里二次编码的逻辑去掉,直接返回原始响应即可,比如改成:
return $response;
- 也可以顺带检查
config/app.php里的json_options配置,确保没有设置会导致额外编码的冗余选项。
内容的提问来源于stack exchange,提问作者Script Mint
相关产品推荐
相关产品推荐

