Я пытаюсь обновить существующее приложение CF8, чтобы потреблять и загружать массив с результатами недавно обновленного ответа API RESTful с использованием OData.ColdFusion 8: преобразовать ответ OData в массив
Вот код в вопросе ... После извлечения данных из API, который отвечает строка OData JSon, код взрывает на последнюю строку, что inits Петли
<!--- Returned data is in json format so must change to an array. --->
<cfset local.result = deserializeJSON(myResult)>
<!--- Reference the array collection of categories --->
<cfset local.collection = local.result>
<!--- Initialize the output object --->
<cfset local.output = arrayNew(1)>
<!--- Loop over the collection --->
<cfloop from="1" to="#arrayLen(local.collection)#" index="local.arrayIndex">
...
Это работает нормально используя предыдущий ответ JSON:
[
{
"id": 1,
"name": "Blah, blah",
}
]
Единственное изменение, вносимое является обновленный JSON ответ:
[
{
"@odata.context": "string",
"value": [
{
"id": 1,
"name": "Blah, blah"
}
]
}
]
Я уверен, что у меня что-то не хватает, но я никогда не работал над CF, так что здесь новая территория.
Мысли?
Спасибо!
ОБНОВЛЕНИЕ: Извините, если не указать более подробно. Вот как приложение в настоящее время использует ответ:
<!--- Loop over the collection --->
<cfloop from="1" to="#arrayLen(local.collection)#" index="local.arrayIndex">
<!--- Create a reference to the array element --->
<cfset local.objectInstance = local.collection[local.arrayIndex]>
<!--- Create a new object reference --->
<cfset local.thisObject = structNew()>
<!--- Seed the object properties --->
<cfset local.thisObject.categoryId = local.objectInstance.id>
<cfset local.thisObject.categoryName = local.objectInstance.name>
<!--- Place the new object in the collection array --->
<cfset arrayAppend(local.output, duplicate(local.thisObject))>
</cfloop>
А вот ошибка я получаю:
Error Occurred While Processing Request
Object of type class coldfusion.runtime.Struct cannot be used as an array
The error occurred in <path to file> line 97
«Линия 97» является начать цикл доступных в обновлении выше:
Я попытался использовать подход «newJSON», предложенный Мигелем (спасибо вам большое за это!), Но, к сожалению, я столкнулся с той же ошибкой.
Еще раз спасибо! -Rich
FWIW, выше [отлично работает с CF10] (http://trycf.com/gist/fc4a542847ab47be6f8362539488924a/acf2016?theme=monokai). (Хотя CF8 может не иметь одинаковой функциональности). * RE: Взорвался на последней строке * Взорвался как? Вы получаете сообщение об ошибке? Если да, можете ли вы [изменить свой вопрос] (http://stackoverflow.com/posts/42102210/edit), чтобы включить его? – Leigh
Спасибо, @Leigh! Это одна из тех ситуаций, когда у меня нет контроля над архитектурой, и в ближайшие пару лет вам грозит полная переписывание. Я владею API, который раскрывает новые данные, и взял на себя роль «поддержки» для обновления клиентов ... это последнее. Я обновил свою начальную запись с ошибкой, которую я могу уловить, HTH! – richwallace
Я согласен с Miguel-F, вы должны делать что-то другое или ошибка вызвана немного другим кодом. Если вы добавите cfloop в мой предыдущий пример, он выдает ошибку на * local.objectInstance *, потому что этот объект является массивом, а не структурой. Таким образом, вы получаете ошибку, потому что * local.objectInstance.id * не существует. Попробуйте его обновленный пример. – Leigh