我有一个应用程序可以下载文件,然后解码它,期待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);
结尾处是正确的。如果失败我怎么处理我的代码呢?
答案 0 :(得分: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的答案
答案 1 :(得分:3)
Actionscript支持try / catch。根据{{3}},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库http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html,它使用JSONDecoder反序列化
https://github.com/mikechambers/as3corelib/
但是,如果您仍然出于某种原因仍然使用as3corelib库,要使Thorsten的代码正常工作,您需要的所有内容(IIRC)将是import com.adobe.serialization.json.JSONParseError;
。