一尘不染

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

json

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

例如

imdb_rating: 7.6
imdb_votes: 6271

但是在生产服务器上,JSON响应作为字符串发送回。

imdb_rating: "7.60"
imdb_votes: "6271"

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

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


阅读 209

收藏
2020-07-27

共1个答案

一尘不染

确保使用支持本机数据类型的 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);
2020-07-27