предполагаемая разница в версиях php, вызывающая разницу в выводе JSON — кавычки вокруг целых чисел

У меня есть тестовый сервер с версией PHP 5.5.9, и у нас есть сервер QA с версией PHP 5.6.16.

Ради этого поста я использую одну и ту же ветку кода в обоих случаях (полное раскрытие: это установка Laravel, но я не уверен, что это проблема Laravel)

На сервере QA API возвращает JSON с целыми числами без кавычек следующим образом (это упрощено):

{["id":1,"name":"John"],["id":2,"name":"Sam"]}

Но на моем сервере (5.6.16) тот же самый точный вызов API возвращает:

{["id":"1","name":"John"],["id":"2","name":"Sam"]}

И Angular это не по вкусу и не разбирает.

Это не данные

Данные и таблицы, из которых поступают данные, абсолютно одинаковы по структуре — я это подтвердил.

Я не хочу «исправлять» Angular

Хотя теоретически Angular должен справиться с этим (?), Я не хочу касаться нашего кода для внешнего интерфейса.

Я хочу, чтобы результат был таким же ..

Независимо от того, что делает Angular, очевидное решение состоит в том, чтобы выходные данные были в точности равны.

Что я делаю?

  • Я хочу избежать обновления PHP на моем сервере — это может открыть больше проблем
  • Я думаю, что в json_encode () есть настройка, которую можно изменить, но я не знаю, какая именно.
  • Также может быть настройка в самом laravel, которая может быть по крайней мере локально изменена на моем конце. Для записи есть более 100+ json_encode звонки в кодовой базе.

1

Решение

Это не проблема в json_encode() это то, что вы кодируете, что имеет значение. Смотрите этот простой пример

$a = array(
'id' => 111,
'astring' => 'test',
'OhLookItsANumberRecordedAsAString' => '456'
);
$json = json_encode($a);
echo $json;

Результат

{"id":111,
"astring":"test",
"OhLookItsANumberRecordedAsAString":"456"}

Но если вы убедитесь, что целые числа являются целыми числами, все будет так, как вы ожидаете

$a = array(
'id' => 111,
'astring' => 'test',
'OhLookItsANumberRecordedAsAString' => '456',
'ANumber' => (int)'456'
);
$json = json_encode($a);
echo $json;

Результат

{"id":111,
"astring":"test",
"OhLookItsANumberRecordedAsAString":"456",
"ANumber":456
}
1

Другие решения

Как @RiggsFolly, это определенно зависит от того, как источник предоставляет целочисленные данные. Если числа указаны из источника, json_decoder рассматривает их как строку.

Что-то, что вы можете попробовать: json_encode как второй параметр, называемый $ options. Установите его, чтобы попытаться закодировать числа в виде целых чисел, а не строк.

http://php.net/manual/en/function.json-encode.php

PHP json_encode кодирует числа в виде строк

0

По вопросам рекламы [email protected]