actionscript3从json数组中获取随机元素

时间:2011-07-04 11:14:09

标签: flash flex actionscript-3 json

如何在动作脚本中导入json文件,然后从json数组/对象中获取随机元素?

2 个答案:

答案 0 :(得分:4)

Mike Chambers下载AS3CoreLib并使用包含的JSONDecoder类将JSON字符串转换为ActionScript对象(在您的情况下为数组)。

var myArray:Array = new JSONDecoder(myJsonArray, true).getValue();

如果它是一个带有数组的JSON对象,你将不得不写这样的东西:

var myObject:* = new JSONDecoder(myJsonObject, true).getValue();
var myArray:Array = myObject.theArray;

然后在0和数组中的最后一个索引之间生成一个随机nr:

var randomIndex:int = Math.round(Math.random() * (myArray.length - 1));

并访问元素:

var myElement:* = myArray[randomIndex];

答案 1 :(得分:3)

我正在使用as3corelib来解析JSON。您可以在这里下载: https://github.com/mikechambers/as3corelib

我把它包起来上课:

import com.adobe.serialization.json.JSON;

import flash.events.EventDispatcher;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;

public class JSONLoader extends EventDispatcher 
{

    private var loader:URLLoader = new URLLoader() ;
    private var request:URLRequest = new URLRequest();
    public var jsonDecoded:Object = new Object();

    public function JSONLoader(DataURL:String):void
    {

        var JSONString:String = DataURL;
        //trace("JSONLoader - JSONString = "+JSONString);

        var urlRequest:URLRequest = new URLRequest(JSONString);

        //var urlLoader:URLLoader = new URLLoader();
        loader.addEventListener(Event.COMPLETE, decodeJSON);
        loader.addEventListener(IOErrorEvent.IO_ERROR, urlLoadErrorHandler);
        loader.load(urlRequest);

        loader.addEventListener(Event.COMPLETE, decodeJSON) ;

    }

    public function decodeJSON(event:Event):void
    {               
        trace("JSONLoader - Jason - "+event.target.data);

        jsonDecoded = JSON.decode(event.target.data);       
        dispatchEvent (new Event("dataReady"));     

        removeListeners();
    }

    public function urlLoadErrorHandler(event:IOErrorEvent):void
    {
        trace("Jason - unable to load data");
        dispatchEvent (new Event("dataFailed"));
        removeListeners();
    }

    public function removeListeners():void
    {
        loader.removeEventListener(Event.COMPLETE, decodeJSON) ;
        loader.removeEventListener(IOErrorEvent.IO_ERROR, urlLoadErrorHandler);         
    }

    public function returnJsonDecoded():Object
    {
        trace("Jason jsonDecoded - "+jsonDecoded);
        return jsonDecoded;
    }   

}

然后这样称呼:

public function getData():void{
        var _URLpath:String = "localdata.json";
        jsonLoader = new JSONLoader(_URLpath);
        jsonLoader.addEventListener("dataReady", collectJSONData);
        jsonLoader.addEventListener("dataFailed", doJSONFailed);
    }
private function collectJSONData(evt:Event):void
    {
        jsonObject = jsonLoader.returnJsonDecoded();
}

然后你有 jsonObject ,你可以使用like数组并随机选择项目。