Laravel 5 控制器将 JSON 整数作为字符串发送

2022-08-30 12:46:32

在我的开发服务器上,来自Laravel 5控制器的JSON响应以正确的类型显示数据。

例如

imdb_rating: 7.6
imdb_votes: 6271

但在生产服务器上,JSON 响应以字符串形式发送回。

imdb_rating: "7.60"
imdb_votes: "6271"

开发和生产都安装了相同版本的 PHP (5.6.11-1)。

关于可能导致这种行为的原因的任何想法?


答案 1

我刚刚遇到了同样的问题!对于那些正在寻找更合适的解决方案的人,您可能需要查看Eloquent模型的$casts属性。

接受的解决方案将起作用,但它也将转换您可能不希望转换的字段。我建议将其添加到您的雄辩模型中:

protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];

这将直接在模型对象中转换值,因此无需担心更新多个终结点。我希望这能像帮助别人一样帮助我!


答案 2

确保使用MySQL本机驱动程序,它将支持本机数据类型。

如果使用 mysqlnd 库,则可以通过设置 MYSQLI_OPT_INT_AND_FLOAT_NATIVE 连接选项将整数列和浮点柱转换回 PHP 数字。如果设置,mysqlnd 库将检查结果集元数据列类型,并将数字 SQL 列转换为 PHP 数字(如果 PHP 数据类型值范围允许)。例如,这样,SQL INT 列将作为整数返回。

MySQL客户端库将以字符串形式返回所有字段。

另一种解决方案是将 json_encode 选项与 结合使用。JSON_NUMERIC_CHECK

例如:

return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);

推荐