不同服务器上的不同格式的JSON响应

时间:2015-07-27 19:47:58

标签: php json nginx laravel-5

我使用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版本或其他东西。两个代码完全相同。

1 个答案:

答案 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()。