Coldfusion + JSON проблема для jqGrid - PullRequest
1 голос
/ 10 августа 2009

Я работаю над настройкой веб-службы jqGrid JSON, чтобы заполнить плагин JQUERY jqGrid. В настоящее время я вывожу следующее с моим кодом:

Ток: {"total": 2, "records": 13, "page": 1, "ROWS": {"arrUsers": [{"1": 1, "4": "bgf", "3": "faaff », "5": "ASD", "2": "ASD", "7": "1231231233", "6": "123asd"}]}}

Требуемый вывод, ожидаемый jqGrid:

Желаемая:

{"page":"1","total":2,"records":"13",       "rows":[{"id":"13","cell":["13","2007-10-06","Client 3","1000.00","0.00","1000.00",null]},{"id":"12","cell":["12","2007-10-06","Client 2","700.00","140.00","840.00",null]},{"id":"11","cell":["11","2007-10-06","Client 1","600.00","120.00","720.00",null]},{"id":"10","cell":["10","2007-10-06","Client 2","100.00","20.00","120.00",null]},{"id":"9","cell":["9","2007-10-06","Client 1","200.00","40.00","240.00",null]},{"id":"8","cell":["8","2007-10-06","Client 3","200.00","0.00","200.00",null]},{"id":"7","cell":["7","2007-10-05","Client 2","120.00","12.00","134.00",null]},{"id":"6","cell":["6","2007-10-05","Client 1","50.00","10.00","60.00",null]},{"id":"5","cell":["5","2007-10-05","Client 3","100.00","0.00","100.00","no tax"]},{"id":"4","cell":["4","2007-10-04","Client 3","150.00","0.00","150.00","no tax"]}],"userdata":{"amount":3220,"tax":342,"total":3564,"name":"Totals:"}}

Неправильное форматирование, которое пишет мой код, может кто-нибудь предложить какие-либо предложения для решения?

Спасибо!

Код:

<cfscript>
thestruct["page"] = 1;
thestruct["total"] = 2;
thestruct["records"] = 13;

thestruct.rows["arrUsers"] = arraynew(1);
thestruct.rows.arrUsers[1]["id"] = 1;
thestruct.rows.arrUsers[1]["FirstName"] = "asd";
thestruct.rows.arrUsers[1]["LastName"] = "faaff";
thestruct.rows.arrUsers[1]["DisplayName"] = "bgf";
thestruct.rows.arrUsers[1]["UserName"] = "ASD";
thestruct.rows.arrUsers[1]["UserAccountingCode"] = "123asd";
thestruct.rows.arrUsers[1]["Phone"] = "1231231233'";

</cfscript>



<cfinvoke component="_system.components.JSON" method="encode" data="#thestruct#" returnvariable="result" />

<cfoutput>#result#</cfoutput>

Ответы [ 2 ]

3 голосов
/ 10 августа 2009

Это возвращение в формате JSON от Adobe для объекта запроса. Приятно, что общий размер пакета данных меньше, но это делает его интересным при работе со средами, которые ожидают одинакового формата.

Вам нужно либо найти специальное устройство чтения данных (я написал его для ExtJ), либо вам придется прекратить использовать формат возврата JSON и использовать Json.CFC (google it) для генерации вашего вывода.

0 голосов
/ 11 августа 2009

Я вижу несколько основных проблем для начала. Во-первых, вам просто нужно удалить элемент "arrUsers". Ключ "row" - это то, что должно быть массивом.

Во-вторых, в вашем «желаемом» формате значения «page» и «records» являются строками (которые содержат числа), но значение «total» является числом.

"page":"1","total":2,"records":"13"

Я бы попробовал обернуть те, которые должны быть строками, в кавычки (если они должны быть строками в JSON), чтобы CF кодировал их как строки вместо чисел.

Кроме этого, не похоже, что вы пытаетесь сопоставить одни и те же поля, поэтому я не могу исправить это больше, чем это. Дайте мне знать, если у вас все еще есть проблемы.

<cfscript>
    thestruct["page"] = "1";
    thestruct["total"] = 2;
    thestruct["records"] = "13";

    thestruct.rows = arrayNew(1);
    thestruct.rows[1] = structNew();
    thestruct.rows[1]["id"] = 1;
    thestruct.rows[1]["FirstName"] = "asd";
    thestruct.rows[1]["LastName"] = "faaff";
    thestruct.rows[1]["DisplayName"] = "bgf";
    thestruct.rows[1]["UserName"] = "ASD";
    thestruct.rows[1]["UserAccountingCode"] = "123asd";
    thestruct.rows[1]["Phone"] = "1231231233'";
</cfscript>
...