Ich versuche, eine vorhandene CF8-Anwendung zu aktualisieren, um ein Array mit den Ergebnissen einer neu aktualisierten RESTful-API-Antwort mithilfe von OData zu laden und zu laden.ColdFusion 8: OData-Antwort in Array konvertieren
Hier ist der Code in Frage ist ... Nachdem die Daten aus der API ziehen, die mit dem OData JSON-String reagiert, bläst der Code auf der letzten Zeile nach oben, dass die Schleife Dieses
<!--- 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">
...
INiTS funktionierte gut mit der vorherige JSON-Antwort:
[
{
"id": 1,
"name": "Blah, blah",
}
]
die einzige eingeführte Änderung ist die aktualisierte JSON Antwort:
[
{
"@odata.context": "string",
"value": [
{
"id": 1,
"name": "Blah, blah"
}
]
}
]
Ich bin sicher, ich vermisse etwas Grundlegendes, aber ich habe noch nie an CF gearbeitet, also ist es Neuland hier.
Gedanken?
Danke!
UPDATE: Entschuldigung, nicht mehr Details zur Verfügung stellen. Hier ist, wie die App derzeit die Antwort verwendet:
<!--- 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>
Und hier ist der Fehler Ich erhalte:
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
"Linie 97", die beginnen wird Schleife in dem Update oben:
Ich habe versucht, den von Miguel angebotenen "newJSON" -Ansatz zu benutzen (vielen Dank dafür!), Aber leider renne ich in den gleichen Fehler.
Danke nochmal! -Rich
FWIW, arbeitet die oben [fein mit CF10] (http://trycf.com/gist/fc4a542847ab47be6f8362539488924a/acf2016?theme=monokai). (Obwohl CF8 möglicherweise nicht die gleiche Funktionalität hat). * RE: explodiert in der letzten Zeile * Blows wie? Erhalten Sie einen Fehler? Wenn ja, können Sie [Ihre Frage bearbeiten] (http://stackoverflow.com/posts/42102210/edit) hinzufügen? – Leigh
Danke, @Leigh! Es ist eine dieser Situationen, in denen ich keine Kontrolle über die Architektur habe und es in den nächsten Jahren zu einem völligen Umschreiben kommt. Ich besitze die API, die die neuen Daten ausstellt, und übernahm die Rolle "Support", um die Clients zu aktualisieren ... dies ist der letzte. Ich habe meinen ersten Eintrag mit dem Fehler aktualisiert, den ich fangen kann, HTH! – richwallace
Ich stimme Miguel-F zu, Sie müssen etwas anderes machen oder der Fehler wird durch etwas anderen Code verursacht. Wenn Sie das cfloop zu meinem vorherigen Beispiel hinzufügen, löst es einen Fehler in * local.objectInstance * aus, da dieses Objekt ein Array und keine Struktur ist. Sie erhalten also einen Fehler, weil * local.objectInstance.id * nicht existiert. Versuchen Sie sein aktuelles Beispiel. – Leigh