2011-04-22 27 views
2

我正在努力通過FlashVars將JSON對象傳遞給.swf並解碼AS3中的JSON FlashVars,並希望你能幫助我。解碼AS3中的JSON FlashVars

問題: 當我嘗試解碼FlashVars時,得到一個JSONParseError: Unexpected o encountered

情況:

甲PHP函數創建路徑從散列的圖像和在此JSON對象並將它們一起:

[{"index":"0", "path":"image1", "ext":"jpg"}, 
{"index":"1", "path":"image2", "ext":"jpg"}, 
{"index":"2", "path":"image3", "ext":"jpg"}] 

這JSON被傳遞通過Flashvars到.swf文件。在HTML我有這樣的:

<param name="FlashVars" value='[{"index":"0", "path":"image1", "ext":"jpg"},{"index":"1", "path":"image2", "ext":"jpg"},{"index":"2", "path":"image3", "ext":"jpg"}]'/> 

PHP函數和瑞士法郎都在同一個文件夾的網絡空間

然後我嘗試在我main.as的Flash變數解碼與此AS3代碼文件(的as3corelib進口):

var imagePaths:Object;  
try { 

    var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; 
    trace(paramObj.toString()); 
    if(paramObj){ 
     imagePaths = JSON.decode(paramObj.toString()); 
    } 
} 
catch (error:Error) 
     { 
      trace(error.toString()); 
     } 

「imagePaths」保持JSON對象,以便以後的圖像的路徑可以構造。據我瞭解JSON.decode返回這工作得很好,當我裝完全相同的JSON localhost上從一個單獨的txt文件:

var imagePathLoader:URLLoader = URLLoader(e.target); 
imagePaths = JSON.decode(imagePathLoader.data); 

錯誤明顯發生在try塊,所以我追查paramObj變量爲trace(paramObj.toString());,並獲得[object Object]作爲輸出。 在我看來,JSON解碼函數試圖解碼字符串[object Object]而不是對象本身,因此在「對象」的第一個「o」處引發錯誤?

我已經嘗試過通過爲FlashVars之前,來urlencode()從PHP的JSON,在http://code.google.com/p/as3corelib/issues/detail?id=119發現沒有的ToString()會拋出這個錯誤確實JSON.decode(paramObj);建議:

1118: Implicit coercion of a value with static type Object to a possibly unrelated type String.

那麼,我該怎麼辦將JSON正確傳遞給.swf並在AS3中將其解碼爲一個對象?

預先感謝任何幫助

+0

您是否嘗試JSON.encode()呢?解碼嘗試將JSON格式的字符串解析爲對象。 Encode將一個動作對象轉換爲JSON格式的字符串。 – scriptocalypse 2011-04-22 13:39:15

回答

1

感謝replies..I昨​​日也發現了這一點,但不能回答我自己8小時的問題(新用戶..)。我所做的: 在嵌入SWF的HTML文件:

<param name="FlashVars" value="var=urlencode([{"index":"0", "path":"image1", "ext":"jpg"}, 
{"index":"1", "path":"image2", "ext":"jpg"}, 
{"index":"2", "path":"image3", "ext":"jpg"}])"/> 

然後在AS3代碼我訪問的FlashVars:

var imagePaths:Object;  
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; 
var myFlashVar:String; 
var varName:String; 
for (varName in paramObj) { 
    myFlashVar = String(paramObj[varName]); 
} 
imagePaths = JSON.decode(myFlashVar); 

然後處理JSON對象usual..thanks爲你的幫助!

+0

這將無法正常工作,即 – 2012-11-29 16:13:51

+0

不能告訴如果是這樣的情況,但在問題的時候,現在甚至更多我不關心IE支持.. – hajn 2013-03-06 22:40:42

4

This page表明,Flash變數的正確用法是:

<PARAM NAME=FlashVars VALUE="varname=value"> 

在你的代碼有

<param name="FlashVars" value='[{"index":"0", "path":"image1", "ext":"jpg"},{"index":"1", "path":"image2", "ext":"jpg"},{"index":"2", "path":"image3", "ext":"jpg"}]'/> 

所以我想它應該是像

<param name="FlashVars" value='myvariable=[{"index":"0", "path":"image1", "ext":"jpg"},{"index":"1", "path":"image2", "ext":"jpg"},{"index":"2", "path":"image3", "ext":"jpg"}]'/> 

然後在閃存代碼,你可以通過

root.loaderInfo.parameters["myvariable"] 

root.loaderInfo.parameters.myvariable

達到這個或者如果你喜歡這種方式

var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; 

然後

paramObj["myvariable"] 

paramObj.myvariable