如何使用 Laravel response()->json() 返回空对象而不是空数组

kin*_*ark 9 json laravel-5

在 Laravel 5.5 中

Route::get('/test2', function (){
    $data = (object) [];

    return response()->json($data);

});
Run Code Online (Sandbox Code Playgroud)

它总是返回[]而不是{}.


另一个代码:

Route::get('/test2', function (){
    $data = (object) [];

    return json_encode($data);

});
Run Code Online (Sandbox Code Playgroud)

它正确返回 {}


我想使用response()->json()helper 返回空对象而不是空数组,这可能吗?

Ham*_*eji 9

这有效:

return response()->json(new stdClass());
Run Code Online (Sandbox Code Playgroud)


Tar*_*ych 5

还有一个例子,灵感来自 Hamid Mohayeji 的回答:

return \response()->json(null);
Run Code Online (Sandbox Code Playgroud)

无需实例化stdClass(尽管需要内存分配)。


blo*_*men 5

这适用于 Laravel 5.6

Route::get('/test2', function (){
    $data = (object) [];

    return response()->json($data, 200, [], JSON_FORCE_OBJECT);

});
Run Code Online (Sandbox Code Playgroud)


Ste*_*hen 1

当您返回时response()->json($data),它会返回一个JsonResponse包含$datadata字段中的对象。因此,当您收到此响应时,您将获得具有相同格式(对象)的数据。

JsonResponse json(字符串|数组$data = [], int $status = 200, 数组$headers = [], int $options)

当您返回 时json_encode($data),它将解析$data并返回一个字符串:"{}"。只有解码"{}",它才会再次成为对象。

字符串 json_encode (混合 $value [, int $options = 0 [, int $深度 = 512 ]] )