Запретить 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"}