При использовании PHP (5.4 / 5.5) и json_encode () у меня возникают некоторые проблемы при использовании опции JSON_NUMERIC_CHECK. Это на производственной системе, поэтому я не могу просто удалить опцию, так как это изменит весь ответ и прервет синтаксический анализ клиента.
Образец кода:
$var = array("id" => 1195756, "hash" => "7e12");
echo json_encode($var) . "\n";
echo json_encode($var, JSON_NUMERIC_CHECK) . "\n";
Выход:
{"id":1195756,"hash":"7e12"}
{"id":1195756,"hash":7000000000000}
Позднее не то, что я хочу. «7e12» является действительным хешем для нашей системы. Я понимаю, что это также ненадежная научная запись, но как я могу заставить значение оставаться строкой?
Примечание: использование strval () не имел никакого эффекта.
Вместо того, чтобы использовать strval()
на полях, где должны остаться строки, используйте intval()
или же floatval()
на полях, которые должны быть числовыми. Другими словами, дайте JSON-кодировщику правильные типы. Тогда вам не нужно JSON_NUMERIC_CHECK
чтобы исправить вещи, которые должны были быть числами, чтобы начать с.
Других решений пока нет …