2

我有一个应用程序,它下载一个文件,然后对其进行解码,期待 JSON 格式,当格式正常时,一切顺利。如果我故意弄乱 json 文件 flash 报告格式错误并停止应用程序。有没有办法处理错误?

代码:

import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;

import com.adobe.serialization.json.JSON;


public class Main extends Sprite 
{

    private var _jsonPath:String = "json_example.txt";

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        var loader:URLLoader = new URLLoader();
        var request:URLRequest = new URLRequest();
        request.url = _jsonPath;
        loader.addEventListener(Event.COMPLETE, onLoaderComplete);
        loader.load(request);
    }


    private function onLoaderComplete(e:Event):void 
    {
        var loader:URLLoader = URLLoader(e.target);
            var jsonArray:Array = JSON.decode(loader.data);
  }

您会看到我的问题就在最后,var jsonArray:Array = JSON.decode(loader.data);如果失败,我该如何处理我的代码?

4

2 回答 2

7

使用try..catch...

import com.adobe.serialization.json.JSONParseError;

try
{
var jsonArray:Array = JSON.decode(loader.data);
}
catch ( e:JSONParseError )
{
    //do something
    trace(e);
}
finally
{
}

此解决方案使用 as3corelib ( http://as3corelib.googlecode.com/ ),如果您使用 JSON.parse() 请查看 JayC 的答案

于 2013-02-16T23:38:31.260 回答
3

Actionscript 支持 try/catch。根据http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html,失败时parse抛出TypeError。所以它看起来像

try
{
    var jsonArray:Array = JSON.parse(loader.data);
}
catch ( e:TypeError )
{
    //do something
}
catch (e: SomethingOtherError)  //not being literal here, just showing 
//you can catch more than one type of exception
{

}
finally
{
    //finally always works, even if the exception is not caught above
}

(已编辑)

上面的代码不应该需要你的 import com.adobe.serialization.json.JSON;

提到的 JSONParseError Thorsten 似乎来自mixpanel 库as3corelib 库https://github.com/mikechambers/as3corelib/它使用 JSONDecoder 反序列化 https://github.com/mikechambers/as3corelib/blob/master/src/com /adobe/serialization/json/JSONDecoder.as

但是,如果您出于某种原因仍想使用 as3corelib 库,以使 Thorsten 的代码正常工作,您所需要的(IIRC)将是import com.adobe.serialization.json.JSONParseError;.

于 2013-02-16T23:49:25.120 回答