我有以下 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)
的属性数量。我读到 here 说 actionjson 比 as3corelib 快 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/