У меня есть тестовый сервер с версией 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, очевидное решение состоит в том, чтобы выходные данные были в точности равны.
json_encode
звонки в кодовой базе.Это не проблема в 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
}
Как @RiggsFolly, это определенно зависит от того, как источник предоставляет целочисленные данные. Если числа указаны из источника, json_decoder рассматривает их как строку.
Что-то, что вы можете попробовать: json_encode как второй параметр, называемый $ options. Установите его, чтобы попытаться закодировать числа в виде целых чисел, а не строк.