Mug*_*les 27 php json laravel php-5.6 laravel-5
在我的开发服务器上,Laravel 5控制器的JSON响应以正确的类型显示数据.
例如
imdb_rating: 7.6
imdb_votes: 6271
但是在生产服务器上,JSON响应将作为字符串发回.
imdb_rating: "7.60"
imdb_votes: "6271"
开发和生产都安装了相同版本的PHP(5.6.11-1).
关于可能导致这种行为的任何想法?
Dav*_*ers 54
我刚遇到同样的问题!对于那些寻找更合适的解决方案的人,您可能想要查看$castsEloquent模型的属性.
接受的解决方案将起作用,但它也会转换您可能不想转换的字段.我建议将其添加到您的Eloquent模型中:
protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];
这将直接在模型对象中转换值,因此您无需担心更新多个端点.我希望这能帮助别人,因为它帮助了我!
Dav*_*ain 45
确保使用支持本机数据类型的MySQL Native Driver.
如果使用mysqlnd库,则可以通过设置MYSQLI_OPT_INT_AND_FLOAT_NATIVE连接选项将integer和float列转换回PHP数字.如果设置,mysqlnd库将检查结果集元数据列类型并将数字SQL列转换为PHP数字,如果PHP数据类型值范围允许的话.这样,例如,SQL INT列将作为整数返回.
MySQL Client Library将所有字段作为字符串返回.
另一个解决方案是使用json_encode选项JSON_NUMERIC_CHECK.
例如:
return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);
mil*_*ili 21
同样的问题也发生在我身上,Laravel 在我发布到共享主机后将所有数字数据作为字符串返回。但在我的本地主机上一切正常。于是找到了这个解决方案。
转到 cPanel --> 选择 PHP 版本 --> 扩展选项卡
然后取消选中pdo_mysql并选中nd_pdo_mysql扩展名。请参阅我的 cPanel 扩展列表的以下屏幕截图

我通过比较本地主机和共享托管服务器的phpInfo找到了这个解决方案。请参阅我进行更改之前和之后的 phpInfo 页面的以下 2 个屏幕截图。
感谢 DavidDomain 的回答,它让我大开眼界,找到了这个解决方案
我希望我的回答对某人有所帮助。