Ответ 1
as3corelib содержит парсер JSON, который сделает это за вас. Убедитесь, что вы изучили список проблем, поскольку новых выпусков этой библиотеки не было, и в ней много ошибок, которые в основном адресованы в списке проблем.
Как создать динамический объект из строки?
Вот мой текущий код с неправильными результатами:
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
Спасибо заранее!
as3corelib содержит парсер JSON, который сделает это за вас. Убедитесь, что вы изучили список проблем, поскольку новых выпусков этой библиотеки не было, и в ней много ошибок, которые в основном адресованы в списке проблем.
Я не знаю, если это лучший способ, но:
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: я не добавляю функцию trim, но эта функция возвращает String и возвращает новую строку без пробелов в начале или в конце строки.
Для записи анализатор JSON не будет анализировать строку в примере, поскольку JSON требует котировок вокруг имен участников. Итак, строка:
var s1:String = '{x:200, y:400}';
... вместо этого должно быть:
var s1:String = '{"x":200, "y":400}';
Может быть немного запутанно, что объектная нотация, такая как {x: 200, y: 400}, которая действительна как в ActionScript, так и JavaScript, недействительна JSON, но если я правильно ее помню, цитаты вокруг имен членов необходимо избегать возможных конфликтов с зарезервированными словами.
Новые версии Flash Player содержат на верхнем уровне класс JSON, читайте документ: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html