我使用laravel并为API返回一个json对象,其中包含以下行:
Return \Response::json(array(
'width' => $widget->widget->width,
'height' => $widget->widget->height
));
当我在本地测试时,使用我的常规laravel服务器(php -S),响应如下:
{"width":2,"height":1}
当我使用Nginx测试我的VPS时,响应如下:
{"width":"2","height":"1"}
添加双引号起初并不是什么大不了的事,但现在它已经杀死了我应用程序的某些部分。 我的问题是:为什么会发生这种情况,我怎样才能让它变得统一? (最好像第一个一样)
ps:我认为这是服务器的差异,但也许它可能是PHP版本或其他东西。两个代码完全相同。
答案 0 :(得分:0)
解决方案1
您可以传递JSON_NUMERIC_CHECK作为选项
Response::json($data, 200, [], JSON_NUMERIC_CHECK);
解决方案2
安装MySQL本机驱动程序。 yum install php-mysqlnd
用于基于Redhat的发行版,例如CentOS。对于基于Debian的发行版,您可以使用apt-get
代替yum
。
不稳定的原因
某些数据库驱动程序返回字符串,而忽略int的字段数据类型。因此,对象中的属性是字符串的类型,并按原样处理json_encode()。