それは可能ですが、JSON パーサーは FruitColor のインスタンスではなく、オブジェクトを返します。したがって、この JSON 文字列を使用すると、Object 型の「fruit_color」フィールドを持つオブジェクトを受け取ります。これには、String 型の 3 つのフィールドがあります。たとえば、この「fruit_color」は実際に完全な FruitColor インスタンスを決定します。この場合、次のようにすることができます。
class FruitColor {
...
public function loadFrom(ob:Object):void {
this.apple=ob.apple;
this.banana=ob.banana;
this.orange=ob.orange;
}
...
}
これを呼び出して、FruitColor の新しいインスタンスを作成し、解析されたオブジェクトを 内に適用しますloadFrom()
。または、次のような既製の FruitColor オブジェクトを返す同様の静的関数を作成します。
public static function loadFrom(ob:Object):FruitColor {
var fc:FruitColor=new FruitColor();
fc.apple=ob.apple;
fc.banana=ob.banana;
fc.orange=ob.orange;
return fc;
}
編集: JSON オブジェクト テンプレートから *.as ファイルが必要な場合、必要な値を提供するコンストラクターが必要な場合は、次のようなアプローチが必要です。
public function makeClassFromObject(ob:Object):String {
var header:String;
var footer:String="}\n}";
var cr:String=""; // constructor header
var props:String="";
var crbody:String="";
for (var k:String in ob) {
var the_ob=ob[k];
if (the_ob is Object) {
header="package { public class "+k+"{\n";
cr="public function "+k+"(";
for (k in the_ob) {
var v:*=the_ob[k];
var tt:String="Object"; // the type
if (v is String) tt="String"; else
if (v is int) tt="Number"; else
if (v is Number) tt="Number"; else
if (v is Array) tt="Array";
props+="private var "+k+": "+tt+";\n";
if (cr.charAt(cr.length-1)!='(') cr+=',';
cr+=k+":"+tt;
crbody+="this."+k+"="+k+";\n";
}
cr+="){\n";
crbody+="}";
} else {
throw new Error("A nested Object is required!");
}
break; // we need ONE field in ob
}
return header+props+cr+crbody+footer;
}