2011-07-14 131 views
1

我有以下两个例程在Flash Builder:的as3corelib JSON解析问题

public function getData():void { 

    httpService = new HTTPService(); 
    httpService.url = "https://mongolab.com/api/1/databases/xxx/collections/system.users/?apiKey=xxx"; 
    httpService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; 
    httpService.addEventListener(ResultEvent.RESULT, resultHandler); 
    httpService.send(); 
} 

public function resultHandler(event:ResultEvent):void { 

    var rawData:String = String(event.result); 
    var arr:Array = JSON.decode(rawData) as Array; 
    Debug.log(rawData); 
    Debug.log(arr); 

    httpService.removeEventListener(ResultEvent.RESULT, resultHandler); 
} 

RAWDATA显示为JSON数据但ARR显示为[对象对象],而不是阵列。

我在做什么错?

回答

1

var jsonStr:String = '{"glossary": {"title": "example glossary","GlossDiv": {"title": "S"},"GlossSee": "markup"}}'; 

将被解析并JSON.decode返回一个对象,你可以访问这样的属性:

var obj:* = JSON.decode(jsonStr); 
trace(obj.glossary); 

var jsonStr:String = '[{"title":"asd"},{"title":"asd"},{"title":"asd"},{"title":"asd"}]'; 

将被解析并返回一个Array(如果你跟踪它,将返回[object Object])。

,所以如果你不知道什么是返回的数据,你可以只检查是否

var result:* = JSON.decode(jsonStr); 
if (result.length != undefined) { 
    // array 
    var arr:Array = result as Array; 
} 
else { 
    // object 
    var obj:Object = result as Object; 
} 

解码周围一个try/catch也将是很好的,因为你不知道,如果是jsonStr良好形成...

欢呼声

+0

感谢队友。抱歉,延迟的回应。 –

+0

如果这是您的正确答案,请将其标记为。谢谢 – pkyeck