as3corelib JSON解析问题

时间:2011-07-14 09:57:25

标签: json actionscript flexbuilder flash-builder

我在Flash Builder中有以下两个例程:

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显示为[object Object]而不是数组。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

并且JSON.decode返回一个Object,您可以访问如下属性:

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

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

将被解析并返回一个数组(如果你跟踪它,将返回[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 around decode也不错,因为你不知道jsonStr是否格式良好......

欢呼声