json actionscript-3 flex actionscript flex3

Cómo decodificar a Json usando JSON o actionjson nativos en Flex 3



actionscript-3 actionscript (4)

import com.adobe.serializers.json.JSONDecoder; var JSON:JSONDecoder = new JSONDecoder(); var result:Object = JSON.decode(JSON_STRING);

eso funcionó para mí, entonces puedes construir nuevos tipos de objeto o valores de acceso jsut

result.template

o

result[''template'']

este último es bueno para valores / claves dinámicos necesarios en lugar de valores clave conocidos

Tengo el siguiente 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":{ } } }

Como puede ver, hay 7 elementos (o subtítulos dentro del workflow encabezado principal). Debajo de cada elemento puede tener otro conjunto de propiedades, por ejemplo: el correo electrónico (item) tiene 3 propiedades ("name":"value") .

Por lo tanto, según la cantidad de propiedades que necesito para poder crear controles (Text) en mi IU de Flex 3.

Leí aquí que actionjson es 5-6 veces más rápido que as3corelib , pero no puedo encontrar ningún código de ejemplo para él. El documento actionjson dice que funciona de la misma manera que corelib, así que incluso intenté import com.adobe.serialization.json.JSON; JSON.decode(rawData) import com.adobe.serialization.json.JSON; JSON.decode(rawData) pero no puede encontrar JSON .

A continuación está mi código

<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>

Ayúdame a buscar name, values si los hay de cada artículo. Gracias

¿No es posible obtener datos json directamente de un objeto (no personalizado) como se hace en jquery ?

Actualizar con Flex Build Path


Si el analizador más rápido es lo que desea, querrá utilizar el análisis nativo de JSON. Su uso es tan simple como esto:

var result:Object = JSON.parse(event.result); trace(result.workflow.template); //traces "Analysis1"

La clase JSON se encuentra en el paquete raíz, por lo que no es necesario importar nada. Puede encontrar información sobre su uso en los documentos .

Sin embargo, el JSON nativo solo está disponible para Flash Player 11 o superior, lo que significa que tendrá que apuntar al menos a esa versión de jugador. Desde su compilación de una aplicación Flex 3, se dirigirá a Flash Player 9 de manera predeterminada. Si sus requisitos no le prohíben apuntar al FP11 +, la solución más fácil es compilar con el SDK de Flex 4.6 (o superior). La captura de pantalla en su pregunta muestra que está utilizando Flex 3.5, por lo que tendrá que cambiar eso en la configuración de "compilación".

Si desea atravesar dinámicamente el objeto resultante, puede hacerlo con un simple bucle ''for'':

//workflow is the root node of your structure var workflow:Object = result.workflow; //iterate the keys in the ''workflow'' object for (var key:String in workflow) { trace(key + '': '' + workflow[key]); } //template: Analysis1 //start: [Object] //host: [Object] //...

Si desea hacerlo recursivamente, puede verificar si un valor es un Objeto o no:

if (workflow[key] is Object) { //parse that node too } else { //just use the value }


Después de seguir la solución de RIAstar, esto es lo que hice (compilador de Flex 3.5 y código de compilación de 4.6)

Compilador de Flex 3.5 que utiliza as3corelib.swc para JSON

import com.adobe.serialization.json.JSON; private var temp:String =''{"workflow":{ "template":"HeapDumpAnalysis", "start":{ "instance":"HDA_run1", "user":"symtest", "date":"3-Mar-2012", "timestamp":"1330948220475" }, "host":{ "name":"estilo", "user":"symtest1", "password":"symtest1", "installpath":"", "product":"" }, "javadump":{ "pid":"8989", "corefilename":"", "heapdump":"", "stack":"", "INFA_HOME":"" }, "mat":{ }, "email":{ "to":"[email protected]", "subject":"", "message":"" }, "end":{ }}}''; private function test():void { var obj = JSON.decode(temp); var workflow:Object = obj.workflow; for (var key:String in workflow) { trace(key + '': '' + workflow[key] + (key is String) + ", " + (workflow[key] is String)); } }

salida

javadump: [object Object]true, false template: HeapDumpAnalysistrue, true host: [object Object]true, false end: [object Object]true, false mat: [object Object]true, false email: [object Object]true, false start: [object Object]true, false

Compilador de Flex 4.6 utilizando el análisis nativo de Json

private var temp:String =''{"workflow":{ "template":"HeapDumpAnalysis", "start":{ "instance":"HDA_run1", "user":"symtest", "date":"3-Mar-2012", "timestamp":"1330948220475" }, "host":{ "name":"estilo", "user":"symtest1", "password":"symtest1", "installpath":"", "product":"" }, "javadump":{ "pid":"8989", "corefilename":"", "heapdump":"", "stack":"", "INFA_HOME":"" }, "mat":{ }, "email":{ "to":"[email protected]", "subject":"", "message":"" }, "end":{ }}}''; private function test():void { var result:Object = JSON.parse(temp); var workflow:Object = result.workflow; for (var key:String in workflow) { trace(key + '': '' + workflow[key] + (key is String) + ", " + (workflow[key] is String)); } }

salida

javadump: [object Object]true, false mat: [object Object]true, false end: [object Object]true, false email: [object Object]true, false host: [object Object]true, false start: [object Object]true, false template: HeapDumpAnalysistrue, true


<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import com.adobe.serialization.json.JSON; [Embed(source="assets/test.json",mimeType="application/octet-stream")] private var json_file:Class; protected function button1_clickHandler(event:MouseEvent):void { trace("Hello from Flex Debugging!"); var bytes:ByteArray = new json_file(); var json:String = bytes.readUTFBytes(bytes.length); trace(json); var arr:Object = JSON.decode(json); for (var keyname:String in arr) { trace ( keyname + ": " + arr[ keyname ] ); } grid.dataProvider = arr; } ]]> </mx:Script> <mx:DataGrid id="grid" right="10" left="10" top="10" bottom="10"> <mx:columns> <mx:DataGridColumn headerText="Name" dataField="name"/> <mx:DataGridColumn headerText="Age" dataField="age"/> </mx:columns> </mx:DataGrid> <mx:Button x="538" y="45" label="Get Json" click="button1_clickHandler(event)"/> </mx:WindowedApplication>

test.json

{"nombre": "dibneg", "edad": "67", "sexo": "femenino", "imagePath": "kamil.jpg"}