Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.03.2010, 17:04
Limeflash вне форума Посмотреть профиль Отправить личное сообщение для Limeflash Найти все сообщения от Limeflash
  № 1  
Ответить с цитированием
Limeflash

Регистрация: Dec 2009
Сообщений: 20
По умолчанию Десериализация объекта

Существует строка следующего вида:

Код:
{
    variable01:'value01',
    variable02 : 'value02',
    variable03 :'value03' ,
    variable04: 'value04'
}
Может быть кто-то знает готовое решение по десериализации такой строки?
Библиотека JSON, которая у меня есть, с задачей не справляется, хочет чтобы имена переменных были в кавычках.

Старый 02.03.2010, 17:42
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 2  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
самостоятельно никак прям?
__________________
Блог, Twitter
Брюзга.

Старый 02.03.2010, 17:53
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
var s:String = "{ variable01:'value01', variable02 : 'value02', variable03 :'value03' , variable04: 'value04' }"
var r:RegExp = /(\w+)[:\s]+'(\w+)'/;
if (r.test(s))
{
	var resultObject:Object = new Object();
	var result:Array;
	while ((result = s.match(r)) != null)
	{
		var resultStr:String = result[0].toString();
		var resLength:int = resultStr.length;
		s = s.substring(result.index+resLength);
		resultObject[result[1]] = result[2];
	}
}
 
trace (resultObject.variable02); // value02
__________________
Reality.getBounds(this);

Старый 02.03.2010, 18:07
Limeflash вне форума Посмотреть профиль Отправить личное сообщение для Limeflash Найти все сообщения от Limeflash
  № 4  
Ответить с цитированием
Limeflash

Регистрация: Dec 2009
Сообщений: 20
mayakwd, замечательный ответ, не лениво писать было? я бы поленился)

Wolsh, я почти так же сделал, только без регулярных, сейчас на ваш вариант сяду. Спасибо)

Старый 02.03.2010, 19:25
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 5  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
а вам не лениво было тему создавать? какой вопрост такой ответ, из-за элементарщины искать либу.
__________________
Блог, Twitter
Брюзга.

Старый 02.03.2010, 19:59
Limeflash вне форума Посмотреть профиль Отправить личное сообщение для Limeflash Найти все сообщения от Limeflash
  № 6  
Ответить с цитированием
Limeflash

Регистрация: Dec 2009
Сообщений: 20
Поковырялся в гугле, пришел к следующему варианту, выполняет задачу полностью. Все оказалось короче, чем думалось.)

Код:
var str:String = "{   name: 'John',   age:'50.5',   IP:'192.168.0.1',   enc:'%$^%$#*&*' }";
//
var reg:RegExp = /(\w+)[:\s]+'(\S+)'/ig;  
var result:Object = reg.exec(str);
var o:Object = new Object();

while (result != null) 
{
	o[result[1]] = result[2];
	result = reg.exec(str);
}
for (var prop:String in o)
{
	trace(prop + " : " + o[prop]);
}
mayakwd, сладкий, не реагируй так резко.)

Старый 02.03.2010, 20:19
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
)) Да, с match я пожалуй поторопился
Так красивее будет)
__________________
Reality.getBounds(this);

Старый 02.03.2010, 20:46
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
/(\w+)[:\s]+'(\S+)'/ig; - G-код
Варинт, который не пройдeт валидацию:
Код:
{ foo: 'Foo Bar' }
Должно быть, как минимум '([^']*)'.
Кроме того, флаг i не нужен, ну и много чего остального зависит непосредственно от конкретной ситуации, и что именно нужно сделать.
Еще G-код:
Код AS3:
while (result != null)
В AS3 выражения в if / while и т.п. автоматически кастуются к Boolean.
__________________
Hell is the possibility of sanity

Старый 02.03.2010, 21:34
Limeflash вне форума Посмотреть профиль Отправить личное сообщение для Limeflash Найти все сообщения от Limeflash
  № 9  
Ответить с цитированием
Limeflash

Регистрация: Dec 2009
Сообщений: 20
Точно, с пробелом не пролазит, ваш вариант, как всегда — более верный.
Задача этого куска кстати несложная - получить обратно объект, созданный для SWFObject в теле HTML.

Старый 02.03.2010, 21:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Тогда задача в общем случае одним регулярным выражением не решается. Это хорошо, если все параметры будут заданы, как примитивы, а если там объекты или вызовы методов? Да, даже не нужно таких сложностей, достаточно одной экранированой кавычки, чтобы регексп оказался бесполезным.

Но, если надеятся, что все, параметры должны быть строками, то можно как-то так:
Код:
var re:RegExp = /(\w+)[\s\r\n]*:[\s\r\n]*('|")(([^\2]|\\\2)*)\2/g;
trace("{ foo: \"bar\"}".match(re));
trace("{ foo: 'ba\\'r'}".match(re));
trace(<![CDATA[
{ foo
: 
'bar'
}]]>.toString().match(re));
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 02.03.2010 в 21:56.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:53.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.