2011-06-15 67 views
1

我想解析我的Flex項目中的JSON文件。我包含as3corelib.swc和導入的com.adobe.serialization.json.JSON,但JSON.decode()函數仍然返回null。可能是什麼問題?解析ActionScript中的JSON(Adobe Flex)。 JSON.decode(string)返回null

[Embed(source="assets/test.json",mimeType="application/octet-stream")] 
private var json_file:Class; 

public function load():void 
{ 
    var bytes:ByteArray = new json_file(); 
    var json:String = bytes.readUTFBytes(bytes.length); 
    trace(json); // String is OK! 
    var arr:Array = (JSON.decode(json) as Array); 
    trace(arr); // Array is null! 
} 

我也試過:

var str:String = (JSON.decode(json) as String); 
    trace(arr); // null! 

和:

var arr:Object = JSON.decode(json); // [object Object] 
    trace(arr.toString()); // empty string 

感謝您的時間。

+1

可能是因爲存在不良JSON,或者不使用正確。 JSON使用鍵值對,並且*總是*解碼成具有屬性的對象。您應該將解碼對象作爲Object.someKey訪問以獲取數據。 – 2011-06-15 17:45:08

+0

JSON很好。我用驗證器檢查了它。 – Jacek 2011-06-15 17:55:10

+0

你說得對J_A_X。我可以通過以下方式訪問元素:trace(arr.GlossEntry [0] .Acronym.toString()); – Jacek 2011-06-15 17:58:03

回答

1

問題已解決,感謝J_A_X(請參閱問題的評論)。元素可以通過鍵訪問。例如:

var obj:Object = JSON.decode(json); 
trace(obj.GlossEntry[0].Acronym.toString()); 
2

試試這也正

var arr:Array = (JSON.decode(json) as Array); 
for (var keyname:String in arr) 
{ 
trace (keyname + ": " + arr[ keyname ]);   
} 
3

在Flex 4.5中它成爲解析,而不是解碼

var obj:Object=JSON.parse(json);