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

Обычно статические методы, свойства и классы распространены в Application уровень. Пока жизни приложения, они совместно используются.

можно определить различное поведение при помощи эти ThreadStatic атрибут. В этом случае они будут характерны для текущего потока, который, я думаю, специфичен для каждого запроса.
я не советовал бы этому хотя, поскольку это кажется сверхсложным.

можно использовать HttpContext.Current.Items для установки материала для одного запроса, или HttpContext.Current.Session для установки материала для одного пользователя (через запросы).

В целом, хотя, если Вы не должны использовать вещи как Server.Transfer, лучший способ в основном создает вещи однажды и затем передает их явно через вызов метода.

132
задан Gottlieb Notschnabel 22 October 2013 в 08:39
поделиться

4 ответа

Я провел очень быстрый тест:

$a = array(
    'id' => 152,
    'another' => 'test',
    'ananother' => 456,
);
$json = json_encode($a);
echo $json;

Кажется, это похоже на то, что вы описываете, если я не ошибаюсь?

И я получаю в результате:

{"id":152,"another":"test","ananother":456}

Итак, в этом случае целые числа не были преобразованы в строку.


Тем не менее, это может зависеть от версии PHP, которую мы используем: было исправлено несколько ошибок, связанных с json_encode, в зависимости от версии of PHP ...

Этот тест был выполнен с PHP 5.2.6; Я получаю то же самое с PHP 5.2.9 и 5.3.0; Однако у меня нет другой версии 5.2.x для тестирования: - (

Какую версию PHP вы используете? Или ваш тестовый пример более сложен, чем опубликованный вами пример?

Может быть, один отчет об ошибке на http://bugs.php.net/ может быть связано? Например, Ошибка № 40503:

28
ответ дан 24 November 2019 в 00:07
поделиться

json_encode сериализует некоторые структуры данных в формате JSON для отправки по сети. Следовательно, все содержимое будет иметь строковый тип. Так же, как когда вы получаете какой-либо параметр от $ _POST или $ _GET.

Если вам нужно выполнить числовые операции с отправленными значениями, просто сначала преобразуйте их в int (с помощью функции intval () в PHP или parseInt () в Javascript), а затем выполните операции.

-2
ответ дан 24 November 2019 в 00:07
поделиться

Ну, PHP json_encode () возвращает строку.

Вы можете использовать parseFloat () или parseInt () в js-коде:

parseFloat('122.5'); // returns 122.5
parseInt('22'); // returns 22
parseInt('22.5'); // returns 22
-2
ответ дан 24 November 2019 в 00:07
поделиться

Я столкнулся с той же проблемой (PHP-5.2.11/Windows). Я использую это обходное решение

$json = preg_replace( "/\"(\d+)\"/", '$1', $json );

которое заменяет все (неотрицательные, целые) числа, заключенные в кавычки, на само число (''42'' становится '42').

См. также этот комментарий в руководстве PHP.

8
ответ дан 24 November 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: