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

Different formats of JSON responses on different servers

我正在使用 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

您可以传入 JSON_NUMERIC_CHECK 作为选项

Response::json($data, 200, [], JSON_NUMERIC_CHECK);

解决方案 2

安装 MySQL 本机驱动程序。 yum install php-mysqlnd 适用于基于 Redhat 的发行版,例如 CentOS。对于基于 Debian 的发行版,您可以使用 apt-get 而不是 yum

不稳定原因

一些数据库驱动程序 return 忽略 int 字段数据类型的字符串。因此,对象中的 属性 是字符串类型,并按原样由 json_encode() 处理。