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

Laravel 5.5返回JSON响应自动添加额外字段问题咨询

解决Laravel 5.5测试中JSON响应出现额外字段的问题

这个问题我之前在项目里碰到过,其实核心原因是你在测试时没有正确提取Laravel响应里的实际JSON内容,反而拿到了整个JsonResponse对象的内部结构。

为什么会出现这些额外字段?

当你在控制器里用return response()->json($return)时,Laravel返回的是一个Illuminate\Http\JsonResponse实例,这个对象包含了响应的所有元数据(比如headers、状态码)和你真正要返回的业务数据(存在original属性里)。如果你的测试代码直接输出或者断言这个对象本身,就会看到headers、original、exception这些内部字段,而不是你预期的纯净JSON。

另外你提到statusCode变成了字符串,这大概率是你构建$return数组时,把665写成了字符串类型(比如"665"),检查一下赋值代码改成整数即可。

正确的测试处理方式

下面是几种解决方法,任选其一都能拿到你预期的JSON数据:

1. 用Laravel测试自带的assertJson方法直接断言(最推荐)

Laravel的测试套件已经封装了专门的JSON断言方法,它会自动解析响应里的JSON内容,不用手动处理:

$response = $this->get('/your-api-endpoint');

// 直接断言响应的JSON内容符合预期
$response->assertJson([
    'statusCode' => 665,
    'msg' => 'auth missing'
]);

2. 用json()方法获取解析后的数组

如果你需要单独处理返回的数据,可以调用响应对象的json()方法,它会把original里的JSON数据解析成关联数组:

$response = $this->get('/your-api-endpoint');

$data = $response->json();
// 现在$data就是你预期的数组:["statusCode" => 665, "msg" => "auth missing"]
$this->assertEquals(665, $data['statusCode']);
$this->assertEquals('auth missing', $data['msg']);

3. 获取原始JSON字符串再解码

如果需要操作原始的JSON字符串,可以用getContent()拿到字符串后手动解码:

$response = $this->get('/your-api-endpoint');

$jsonStr = $response->getContent();
$data = json_decode($jsonStr, true); // 第二个参数true返回关联数组
$this->assertEquals(665, $data['statusCode']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:40:01