Потоковые парсеры (JSON / XML) для приложений AS3 / Flex / Adobe AIR - PullRequest
3 голосов
/ 15 мая 2009

Есть ли в AS3 библиотеки потокового чтения и анализа для форматов json или xml? Я настраиваю приложение с длинным опросом, используя URLStream / URLRequest. У меня нет контроля над данными, которые я получаю, кроме выбора между форматами. Я хотел бы иметь парсер, который может обрабатывать фрагменты одновременно, что позволило бы мне запускать пользовательские события, когда становятся доступны определенные полные фрагменты. Мысли? Что текущие приложения AIR делают для этого?

Пример API:

var decoder:StreamingJSONDecoder = new StreamingJSONDecoder();
decoder.attachEvent("onobjectavailable", read_object); 

while (urlStream.bytesAvailable) 
{
  decoder.readBytes(get_bytes(urlStream)); 
}

Ответы [ 3 ]

1 голос
/ 24 декабря 2010

Текущая версия AIR (v2.5) объединяет более новый WebKit, который имеет встроенную поддержку JSON, через JSON.stringify () и JSON.parse ().

1 голос
/ 18 мая 2009

Да.

Посмотрите на AS3 Corelib: http://code.google.com/p/as3corelib/

Это библиотека Adobe. Там должно быть больше информации на labs.adobe.com .

У меня были проблемы с парсером RSS в формате даты, но кроме этого все выглядело нормально.

Гудлак!

0 голосов
/ 01 июля 2009

Вы можете потенциально использовать экземпляр URLStream для постепенной загрузки данных из удаленной сети, а затем декодировать результат JSON, когда доступно достаточно данных.

Примерно так (не проверено, просто чтобы дать вам представление):

var stream:URLStream = new URLStream();
stream.addEventListener( ProgressEvent.PROGRESS, handleProgress );
stream.load( new URLRequest( "/path/to/data" ) );

function handleProgress( event:ProgressEvent ):void
{
    // Attempt to read as much from the stream as we can at this point in time
    while ( stream.bytesAvailable )
    {
        // Look for a JSONParseError if the JSON is not complete or not
        // encoded correctly.
        // Look for an EOFError is we can't read a UTF string completely
        // from the stream.
        try
        {
            var result:* = JSON.decode( stream.readUTF() );
            // If we're here, we were able to read at least one decoded JSON object
            // while handling this progress event
        }
        catch ( e:Error )
        {
            // Can't read, abort the while loop and try again next time we
            // get download progress.
            break;
        }
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...