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

时间:2015-07-20 21:58:34

标签: php json laravel laravel-5 php-5.6

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

e.g

imdb_rating: 7.6
imdb_votes: 6271

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

imdb_rating: "7.60"
imdb_votes: "6271"

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

关于可能导致此行为的任何想法?

3 个答案:

答案 0 :(得分:49)

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

接受的解决方案可行,但它也会转换您可能不想转换的字段。我建议将其添加到您的Eloquent模型中:

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

这将直接在模型对象中转换值,因此您不必担心更新多个端点。我希望这能帮助别人,就像它一样!

答案 1 :(得分:43)

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

答案 2 :(得分:0)

您可以像

一样通过类型转换返回整数
return (int)Post::find(1)->id;