2012-12-03 88 views
3

我一直在打獵幾個小時,我仍然不知道發生了什麼事情。我是PHP的新手,但對簡單的Flash工具相當舒服。AS3,PHP和JSON - 解碼一個對象是好的,一個數組返回null

我傳遞一個JSON對象從PHP到Flash AS3使用URLLoaders等,這是我的PHP創建的測試JSON陣列:

$objJSON = array('sample' => null); 
    $objJSON['sample'] = "TESTING"; 
    $objJSON['sample2'] = "TESTING2"; 
    $objJSON = json_encode($objJSON); 

我回到它閃爍

echo "arrayData=$jsonArray"; 

當我分析,隨着閃存(單個對象,使用

var tempJSON = JSON.decode(event.target.data.arrayData); 

我得到「測試」作爲我的輸出textBox.t ext = tempJSON.sample;使用本地主機通過WAMP),這是正確的。一切看起來不錯,有通信,JSON庫正在使用的權利,對象是在那裏和訪問...

但是!當我把它當作一個數組(因爲這是它是什麼)通過改變代碼的正上方(和其他人接觸是Nothing):

var tempJSON:Array = JSON.decode(event.target.data.arrayData, true); 

我扔的編譯器錯誤:

TypeError: Error #1009: Cannot access a property or method of a null object reference. at com.adobe.serialization.json::JSONTokenizer/nextChar()[....\json\JSONTokenizer.as:545]

在本地主機運行swf讓我不會回到以前用來獲取字符串的地方。我是否犯了一些新手的錯誤,當我把它當作數組對待時,數據突然變爲空?

我已經通過PHP中的輸出檢查了我的JSON的有效性,它檢出。我已經確定在被調用的PHP類中沒有額外的回聲。我只是難住。

FIX'D!

在註釋的引導下,我基本上沒有把我的JSON形成一個數組,只是具有多個屬性的對象。正確的方法是:

$objArray = array(
    array(
    "sample1" => "Testing!", 
    "sample2" => "Testing2!", 
), 
    array (
    "sample1" => "Testing!", 
    "sample2" => "Testing2!", 
) 
); 


$objArray = json_encode($objArray); 
+0

請同時添加JSON的例子。 –

回答

3

我相信這是因爲你的JSON解碼成一個對象而不是一個數組。如果您使用非整數值作爲數組鍵(例如'sample','sample2'),則會發生這種情況。

我對AS3並不太熟悉,但您可能需要將其轉換爲Object類實例而不是Array。

$objJSON = array('sample' => "TESTING", 'sample2' => "TESTING2"); 
echo json_encode($objJSON); 

// Will output 
{ "sample": "TESTING", "sample2": "TESTING2" } 

這是使用JSON 數組符號。這是對象表示法。

我希望這有助於!

+1

是的,Javascript(以及ActionScript應該是相同的)不會像數組一樣處理數組和對象。如果你的數字索引從0開始,沒有間隔,你會得到一個數組。其他任何東西,包括文本字符串作爲鍵:對象。 – Sven

+0

謝謝,這就是它。我沒有正確地將我的JSON對象形成爲一個正確解析的數組。 – Kate

相關問題