2015-07-27 4 views
0

я использую Laravel и возвращающих объект JSON для API, с помощью следующей строки:Различные форматы ответов JSON на разных серверах

Return \Response::json(array(
      'width' => $widget->widget->width, 
      'height' => $widget->widget->height 
     )); 

Когда я проверить локально, с моим регулярным сервером Laravel (PHP - S), ответ выходит так:

{"width":2,"height":1} 

Когда я проверить на моем VPS с помощью Nginx, ответ выходит так:

{"width":"2","height":"1"} 

Добавление двойных кавычек сначала не казалось большим делом, но теперь оно убивает некоторые части моего приложения. Мой вопрос: почему это происходит и как я могу сделать его однородным? (предпочтительнее и то, и другое)

ps: Я полагаю, что это разница в сервере, но, возможно, это может быть версия PHP или что-то еще. Код тот же самый для обоих.

+1

Вы извлекаете значения из MySQL? Это может быть связано: http://stackoverflow.com/questions/21961870/laravel-returns-json-string-on-local-machine-but-integer-on-elastic-beanstalk-in – jmar777

+1

Это не отвечает, почему это но вы можете использовать листинг атрибутов (http://laravel.com/docs/5.1/eloquent-mutators#attribute-casting), чтобы помочь в этом. –

ответ

0

Решение 1

Вы можете передать в JSON_NUMERIC_CHECK в качестве опции

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

Solution 2

Установите MySQL родной драйвер. yum install php-mysqlnd для дистрибутивов Redhat, таких как CentOS. Для дистрибутивов на основе Debian вы можете использовать apt-get вместо yum.

Причина нестабильности

Некоторые драйверы баз данных возвращать строки не учитывая тип данных поля в междунар. Следовательно, свойство в вашем объекте является типом строки и обрабатывается json_encode() как есть.

Смежные вопросы