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)