Actionscript3 получить случайный элемент из массива JSON - PullRequest
0 голосов
/ 04 июля 2011

Как импортировать файл json в сценарий действия, а затем получить случайный элемент из массива / объекта json?

Ответы [ 2 ]

4 голосов
/ 04 июля 2011

Загрузите 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 и последним индексом в массиве:

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

и доступ к элементу:

var myElement:* = myArray[randomIndex];
3 голосов
/ 04 июля 2011

Я использую 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 и вы можете использовать как массив и случайным образом подбирать элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...