2014-11-19 3 views
1

ColdFusion преобразует строку в число при переходе в JS через SerializeJSON и deSerializeJSON.ColdFusion SerializeJSON и deSerializeJSON преобразует строку в число

Это происходит только тогда, когда между двумя наборами чисел используется «E». например 3E6, 65E3, 56e45 и т. д. Это код внутри cfscript.

x = "2e9"; 
writedump(SerializeJSON(x)); 
writedump(deSerializeJSON(SerializeJSON(x))); 

Output: 
2.0E9 2000000000 

Просьба предложить, если есть какие-либо другие способы решения таких вопросов.

+0

Почему вы сериализуете переменную, содержащую строку? Вам действительно нужно сериализовать массивы или структуры. –

+0

Это просто случай с воспроизведением, Саймон: он будет воздействовать на подобную строку в любой части структуры данных, которая будет сериализована. –

+0

Странно, если я выделил вышеприведенный код, как этот **
x = 2e9;
\t \t \t y = SerializeJSON (x);
\t \t \t z = deSerializeJSON (y);
\t \t \t \t writedump (z); **
, я получаю выход 2000000000. Может ли кто-нибудь рассказать об этом? –

ответ

8

Это: https://bugbase.adobe.com/index.cfm?event=bug&id=3695627: «SerializeJSON превращает струны, которые выглядят как научная нотация в поплавках».

Это известная ошибка в CF9, и она зафиксирована в CF10.

В то же время вам просто нужно проложить струну чем-то, чтобы заставить ColdFusion не видеть его как число в научной нотации.

Или обновление до CF10 (CF9 - конец жизни в следующем месяце, кстати). Или к Рейло.

+0

Спасибо Адаму. Это полезно. –

+2

Или попробуйте проклятие Бена хорошей сериализации CFC. https://github.com/bennadel/JsonSerializer.cfc –

+0

Да, Раймонд, только что прошел. Надеюсь, что это поможет ... Спасибо –

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