Как создать объект из строки в actionscript 3.0 (as3) - PullRequest
10 голосов
/ 02 октября 2009

Как я могу создать динамический объект из строки?

Вот мой текущий код с неверными результатами:

var s1:String = '{x:200, y:400}';
var o1:Object = Object(s1);

trace(o1); // result = {x:200, y:400}
trace(o1.x) // result = ReferenceError: Error #1069: Property x not found on String and there is no default value.
trace(o1.y) // result = ReferenceError: Error #1069: Property x not found on String and there is no default value.

Я бы хотел, чтобы предыдущий код вывел следующее:

trace(o1); // result = [object Object]
trace(o1.x); // result = 200
trace(o1.y); // result = 400

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 02 октября 2009

Не знаю, лучший ли это способ, но:

var serializedObject:String = '{x:200,y:400}'
var object:Object = new Object()

var contentWithoutBraces:String = serializedObject.substr(serializedObject.indexOf('{') + 1)
contentWithoutBraces = contentWithoutBraces.substr(0, contentWithoutBraces.lastIndexOf('}'))

var propertiesArray:Array = contentWithoutBraces.split(',')

for (var i:uint = 0; i < propertiesArray.length; i++)
{
    var objectProperty:Array = propertiesArray[i].split(':')

    var propertyName:String = trim(objectProperty[0])
    var propertyValue:String = trim(objectProperty[1])

    object[propertyName] = Object(propertyValue)
}

trace(object)
trace(object.x)
trace(object.y)

Это будет делать то, что вы хотите.

Вы можете сделать это рекурсивным способом, поэтому, если объект содержит другие объекты, также будут преобразованы;)

PS: я не добавляю функцию обрезки, но эта функция получает строку и возвращает новую строку без пробелов в начале или конце строки.

4 голосов
/ 02 октября 2009

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

3 голосов
/ 04 октября 2009

Для записи анализатор JSON не будет анализировать строку в примере, поскольку JSON требует кавычек вокруг имен членов. Итак, строка:

var s1:String = '{x:200, y:400}';

... вместо этого должно быть:

var s1:String = '{"x":200, "y":400}';

Может быть немного запутано, что обозначение объекта, такое как {x: 200, y: 400}, которое допустимо как в ActionScript, так и в JavaScript, не является допустимым JSON, но если я правильно помню, кавычки вокруг имен членов необходимо избегать возможных конфликтов с зарезервированными словами.

http://simonwillison.net/2006/Oct/11/json/

1 голос
/ 06 ноября 2012

Более новые версии Flash Player на верхнем уровне содержат класс JSON, прочитайте документацию: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html

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