如何在Flex 3中使用本机JSON或actionjson解码Json

abi*_*964 4 apache-flex json actionscript flex3 actionscript-3

我有下面的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":"ars@gmail.com",
        "subject":"",
        "message":""
    },
    "end":{
    }
}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,有7个项目(或主标题内的子标题workflow).在每个项目下,它可以有另一组属性,例如:email (item)有3个属性("name":"value").

因此,基于我需要能够(Text)在Flex 3 UI中创建控件的属性数量.

我读到这里actionjson比快5-6x 的as3corelib,但我无法找到任何示例代码它.actionjson doc说它的功能与corelib相同,所以我甚至试过import com.adobe.serialization.json.JSON; JSON.decode(rawData)但是找不到它JSON.

以下是我的代码

<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>
Run Code Online (Sandbox Code Playgroud)

请帮我name, values从每个项目中取出.谢谢

是不是可以直接从对象(不是自定义)获取json数据,就像在jquery中完成一样?

使用Flex构建路径进行更新

在此输入图像描述

RIA*_*tar 10

如果最快的解析器是你想要的,那么你将需要使用本机JSON解析.它的用法很简单:

var result:Object = JSON.parse(event.result);
trace(result.workflow.template);  //traces "Analysis1"
Run Code Online (Sandbox Code Playgroud)

JSON类位于根包,所以不需要输入任何东西.您可以在文档中找到有关其用法的信息.

但是,原生JSON仅适用于Flash Player 11或更高版本,这意味着您必须至少定位该播放器版本.自编译Flex 3应用程序以来,默认情况下它将以Flash Player 9为目标.如果您的要求不禁止您定位FP11 +,最简单的解决方法是使用Flex 4.6(或更高版本)SDK进行编译.您问题中的屏幕截图显示您正在使用Flex 3.5,因此您必须在"构建路径"设置中更改它.


如果您希望动态遍历生成的对象,可以使用简单的"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]
//...
Run Code Online (Sandbox Code Playgroud)

如果要以递归方式执行此操作,可以检查值是否为Object:

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