Wie Dekodiere Json mit nativer JSON-oder actionjson in Flex 3
Habe ich die unten Json (wf.json)
{
"workflow":{
"template":"Analysis1",
"start":{
"instance":"HDA_run1",
"user":"symtest",
"date":"3-Mar-2012",
"timestamp":"1330948220475"
},
"host":{
"name":"bartla",
"user":"symtest1",
"password":"symtest1",
"installpath":"",
"product":""
},
"javadump":{
"pid":"8989",
"corefilename":"",
"heapdump":"",
"stack":"",
"JAVA_HOME":""
},
"mat":{
},
"email":{
"to":"[email protected]",
"subject":"",
"message":""
},
"end":{
}
}
}
Wie Sie sehen können, gibt es 7 Elemente (oder sub-überschriften innerhalb Hauptüberschrift workflow
). Unter jedes Element kann einen anderen Satz von Eigenschaften, z.B.: E-Mail (item)
hat 3 Eigenschaften ("name":"value")
.
Also basierend auf der Anzahl der Eigenschaften, die ich brauche, um in der Lage sein, um Steuerelemente zu erstellen (Text)
in meine Flex 3 UI.
Lese ich hier, dass actionjson ist 5-6x schneller als die as3corelib, aber ich bin nicht fähig zu finden, alle Beispiel-code für es. Die actionjson doc sagt, dass es die gleiche Funktionsweise wie corelib, so dass ich sogar versucht import com.adobe.serialization.json.JSON; JSON.decode(rawData)
aber es ist nicht zu finden JSON
.
Unten ist mein code
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" minWidth="955" minHeight="600"
creationComplete="service.send()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
private function onJSONLoad(event:ResultEvent):void
{
//get the raw JSON data and cast to String
var rawData:String = String(event.result);
//Alert.show(rawData); This prints my JSON String
var obj:Object = decodeJson(rawData);
/*error call to possibly undefined method decodeJson*/
Alert.show(obj.toString());
}
]]>
</mx:Script>
<mx:HTTPService id="service" resultFormat="text"
url="/cjb/wf.json"
result="onJSONLoad(event)" />
</mx:Application>
Bitte helfen Sie mir Holen name, values
wenn jeder von jedem Element. Dank
Ist es nicht möglich, direkt fetch json-Daten von einem Objekt (nicht custom-made), wie es in jquery?
Update mit "Flex-Erstellungspfad"
keine links wo ich Lesen kann & heißt es, es gilt nur für Flash Player 11 & oben?
help.adobe.com/en_US/as3/dev/... und ja, das FP-11+
Danke, nach Lesen, Es scheint, dass ich brauche zum erstellen von benutzerdefinierten Klassen zu halten die Eigenschaften, die aber in meinem Fall weiß ich nicht, die Anzahl der Eigenschaften, die ein Element ist, dass
(0 or more)
. Also, was ist meine beste option?Kommen Sie, daran zu denken: Flex 3 kommt mit einem playerglobal.swc, Ziele FlashPlayer 9. So würden Sie entweder zum kompilieren von Flex 3 app mit der Flex 4.5-compiler oder ersetzen, dass die playerglobal.swc mit der von der Flex 4.5-SDK. Ist eine dieser Ansätze, die für Sie akzeptabel?
InformationsquelleAutor abi1964 | 2012-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die schnellsten parser ist das, was Sie wollen, dann werden Sie wollen, verwenden Sie das native JSON-parsing. Seine Nutzung ist so einfach wie diese:
Den JSON - Klasse befindet sich in dem root-Paket, so dass keine Notwendigkeit zu importieren nichts. Sie finden Informationen über seine Verwendung in der docs.
Allerdings nativen JSON ist nur verfügbar für Flash Player 11 oder höher, was bedeutet, dass Sie haben, um den Gegner zumindest, dass die player-version. Seit Ihrem kompilieren von Flex 3 Anwendung, es wird Ziel-Flash Player ab Version 9 standardmäßig. Wenn Ihre Anforderungen nicht verbieten Sie von der Ausrichtung auf FP11+, der einfachste fix ist das kompilieren mit dem Flex 4.6 (oder höher) SDK. Der screenshot in deiner Frage zeigt, dass Sie mit Flex 3.5, so müssen Sie ändern, in dem "build path" - Einstellungen.
Wenn Sie möchten, Durchlaufen das resultierende Objekt dynamisch ist, können Sie es mit einem einfachen " for " - Schleife:
Wenn Sie wollen, um es rekursiv ist, können Sie prüfen, ob ein Wert ein Objekt ist oder nicht:
Analysis1
fürAlert.show(obj.workflow.template); Alert.show(obj.workflow.length()); Alert.show(obj.workflow[1]);
code, aber später-Benachrichtigungen nicht zu funktionieren scheinen. Ich wollte allekeys
&values
wie ich bereits erwähnt habe, es ist dynamisch, und ich weiß nicht, welche Schlüssel und Werte der Json enthalten könnte. So kann eine Art traversal und ich werde alle keys bekomme. Gibt es eine Möglichkeit? Vielen Dank und sorry, dass ich so ein noobIch habe ein dynamic-traversal Beispiel zu meiner Antwort. Auch können Sie kompilieren eine Flex3-app mit der Flex 4.6 compiler. Sie müssen nur sicher sein, dass Ihre Kunden Anforderungen ermöglichen es Ihnen, Ziel-FP 11
Genial.. genau das was ich wollte. Dank der sehr nette information.
nur um von anderen newbie ' s ich füge meine Antwort, aber credit geht an dich 🙂
InformationsquelleAutor RIAstar
test.json
{
"name": "dibneg",
"Alter" : "67",
"sex": "female",
"imagePath": "kamil.jpg"
}
InformationsquelleAutor Dinesh
Nach folgende Lösung aus RIAstar, das ist, was ich getan habe (Flex 3.5-compiler & 4.6 compiler code)
Flex 3.5-compiler mit as3corelib.swc-Datei für JSON
Ausgabe
Flex 4.6 compiler mit nativer Json-parsing
Ausgabe
InformationsquelleAutor abi1964
arbeitete für mich
dann können Sie entweder den Aufbau neuer Objekt-Typ(en) oder einfach nur auf Werte zugreifen, die entweder
oder
letzteres ist gut für dynamische Werte/Schlüssel, die benötigt werden vielmehr als Schlüssel-Werte
import com.adobe.serialization.json.JSONDecoder; var obj = JSON.decode(event.result.toString()); Alert.show(obj.template);
aber ich gibt mir leere alert-boxEs ist auch native JSON-parsing?
Nein ist es nicht und es ist auch keine 'actionjson'. Dies ist die von 'as3corelib", die Sie versuchen zu ersetzen.
Und dass die Warnung nicht angezeigt wird nichts, weil Sie brauchen, um auf diesen Wert zugreifen, durch
result.workflow.template
stattresult.template
. Nicht eine Antwort auf die Frage, und einen Fehler: -1InformationsquelleAutor DrogoNevets