2009-10-02 3 views
10

文字列から動的オブジェクトを作成するにはどうすればよいですか?actionscript 3.0(as3)でオブジェクトフォームを作成する方法

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

as3corelibには、これを行うJSONパーサーが含まれています。 issues listを勉強してください。このライブラリの新リリースはなく、そこには多くのバグがありますが、それは主に問題リストに記載されています。

+1

私は同じことを答えることがちょうど約ました:)特定の問題にあなたを解決するためにそのlib:JSON.decode(str)とJSON.encode(obj) 'のJSONクラスを別の方法で使用しています。 – JStriedl

+0

バグについては、それを修正する人がいます。参照:http://code.google.com/p/as3corelib/source/listあなたはただSVNからチェックアウトする必要があります。 –

+0

私が言ったように、「新しいリリースはありません」しかし、はい、これは知っておくと良いです。 – spender

4

私はこれが最善の方法であれば知らない:

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:私は、トリム機能を追加しませんが、この関数は文字列を受け取ると、新しいStringを返します。文字列の先頭または末尾にスペースを入れないでください。

3

JSONパーサーは、JSONパーサーがメンバー名の前後に引用符を必要とするため、この例では文字列を解析しません。

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

...代わりでなければならない:文字列がそうつまり、{400:200、Y X}

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

それは同様に、そのオブジェクトの表記を混乱ビットとすることができますActionScriptとJavaScriptの両方で有効ですが、有効なJSONではありませんが、正しいことを覚えていれば、予約語との競合を避けるためにメンバー名を引用符で囲む必要があります。

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

関連する問題