json - 如何在 Flex 3 中使用原生 JSON 或 actionjson 解码 Json

标签 json actionscript-3 apache-flex actionscript flex3

我有以下 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":{
    }
}
}

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

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

我读到 hereactionjsonas3corelib 快 5-6 倍,但我找不到任何示例代码。 actionjson 文档说它的功能与 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>

请帮助我从每个项目中获取 name, values(如果有)。谢谢

是否无法像在 jquery 中那样直接从对象(非定制)中获取 json 数据?

使用 Flex 构建路径更新

最佳答案

如果最快的解析器是您想要的,那么您将需要使用原生 JSON 解析。它的用法很简单:

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

JSON 类位于根包中,因此无需导入任何内容。您可以在 docs 中找到有关其用法的信息。

但是,原生 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]
//...

如果你想递归地做,你可以检查一个值是否是一个对象:
if (workflow[key] is Object) {
    //parse that node too
}
else {
    //just use the value
}

关于json - 如何在 Flex 3 中使用原生 JSON 或 actionjson 解码 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667291/

相关文章:

apache-flex - 是否有针对 Flex 的多行文本解决方法

ios - Adobe Flex/AIR iOS 应用程序 - 如何将参数传递到应用程序中?

android - 允许用户在 android 调查/数据收集应用程序中创建表单

json - Grails Ajax回调无法正确呈现/响应

php - 使用 jQuery 的 .ajax() 函数从 php 脚本检索变量的最佳方法?

javascript - 如何在 JSON 上应用复杂的数据过滤器,例如 SQL where 子句

javascript - 如何使用未提供经纬度的地址在谷歌地图上放置多个标记?

actionscript-3 - 是否有替代工厂方法的替代方法?

actionscript-3 - AS 3 游戏结束屏幕闪光倒计时器

java - GWT vs Flex vs?