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

如何在Laravel中使用response()->json()返回空对象而非空数组

嘿,这个问题我之前在Laravel 5.x版本里也碰到过,确实有点坑!

其实原因在于Laravel的response()->json()底层虽然依赖json_encode(),但它在处理数据的时候会经过一层封装逻辑,导致空的stdClass对象(也就是你用(object) []创建的)被转换成了空数组返回。不过别担心,有几种靠谱的办法可以解决这个问题:

方法一:手动编码JSON后规范返回

这个思路和你用json_encode()的操作一致,但用Laravel的响应方法更符合框架规范:

Route::get('/test2', function (){
    $data = (object) [];
    // 手动编码后用response()->make()返回,并指定正确的Content-Type
    return response()->make(json_encode($data), 200, ['Content-Type' => 'application/json']);
});

或者更简洁的写法:

Route::get('/test2', function (){
    $data = (object) [];
    return response(json_encode($data))->header('Content-Type', 'application/json');
});

方法二:利用JSON编码选项强制返回对象

你可以给response()->json()传递第四个参数,指定JSON_FORCE_OBJECT选项,这样就能确保空对象被正确序列化为{}:

Route::get('/test2', function (){
    $data = new \stdClass(); // 和(object) []效果完全一致
    return response()->json($data, 200, [], JSON_FORCE_OBJECT);
});

这个选项会让PHP在JSON编码时将所有数组都以对象形式处理,对于你的空对象场景来说,刚好能精准解决问题。

方法三:临时给空对象加属性(取巧但有效)

如果不想手动编码,也可以给空对象添加一个临时属性后再删除,这样Laravel就不会把它识别为空数组处理了:

Route::get('/test2', function (){
    $data = (object) [];
    $data->temp = null;
    unset($data->temp);
    return response()->json($data);
});

其中方法一和方法二是比较推荐的常规解决方案,方法三更像是临时的小技巧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:00:14