Запретить ColdFusion преобразовывать строку в число, используя SerializeJSON
У меня есть ColdFusion 9.0.1 с последним исправлением (4).
Мне нужно, чтобы ColdFusion возвращал все данные JSON с кавычками вокруг них (как строки). У меня есть следующая проблема:
<cfset test = StructNew()>
<cfset test.name = "1234.100">
<cfoutput>#SerializeJSON(test)#</cfoutput>
Выводимый текст:
{"name":1234.100}
Каждый парсер JSON Javascript преобразует его в 1234.1 и не сохраняет конечные 0. Мне нужно ColdFusion для вывода в виде строки или парсера javascript, чтобы сохранить конечные 0. Любые идеи?
Это упрощенный пример. Я извлекаю эти данные из базы данных.
Ответы
Ответ 1
Если вы не хотите использовать kludge, вы можете использовать стороннюю библиотеку, которая правильно кодирует JSON. Я использовал JSONUtil из http://jsonutil.riaforge.org/. Я использую ColdFusion 9, поэтому я не знаю, исправили ли последние версии ColdFusion некоторые из аномалий кодирования.
Ответ 2
Здесь решение - хотя и очень хакерское, неэлегантное решение...
Ваша настройка:
var test = {
name = "1234.100"
};
Добавление некоторой очевидной строки к фронту приводит к тому, что значение становится строкой, когда оно преобразуется в JSON. Затем мы избавляемся от этой уродливой строки.
var thisIsSuchAHorribleHack = "([email protected][email protected]$)";
test.name = thisIsSuchAHorribleHack & test.name;
var serializedTest = SerializeJSON(test);
serializedTest = Replace(serializedTest, thisIsSuchAHorribleHack, "", "ALL");
writeOutput(serializedTest);
Ответ 3
Нам посчастливилось использовать Jackson, чтобы обойти кошмар, который обрабатывает CF json.
Ответ 4
Просто добавьте простой пробел в начале вашего номера.
Я попытался сделать это в конце, но он не работает.
<cfset test = StructNew()>
<cfset test.name = " 1234.100">
<cfoutput>#SerializeJSON(test)#</cfoutput>
Выход будет
{"name":" 1234.100"}