【问题标题】:Decode JSON FlashVars in AS3在 AS3 中解码 JSON FlashVars
【发布时间】:2011-08-10 21:25:06
【问题描述】:

我正在努力通过 FlashVars 将 JSON 对象传递给 .swf 并在 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 函数和 .swf 位于网络空间的同一文件夹中

然后我尝试使用此 AS3 代码(已导入 as3corelib)解码我的 main.as 文件中的 FlashVars:

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 对象,以便稍后可以构建图像的路径。据我了解,当我从一个单独的 txt 文件在 localhost 上加载完全相同的 JSON 时,JSON.decode 会返回一个 This 工作正常:

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

错误明显出现在try块中,所以我用trace(paramObj.toString());跟踪paramObj变量,得到[object Object]作为输出。 在我看来,JSON解码函数试图解码字符串[object Object]而不是对象本身,因此在“对象”的第一个“o”处抛出错误?

在作为 FlashVars 传递之前,我已经尝试从 PHP 中对 JSON 进行 urlencode(),在 http://code.google.com/p/as3corelib/issues/detail?id=119 上找到的建议并在没有 .toString() 的情况下执行了 JSON.decode(paramObj);,这会引发此错误:

1118: 值的隐式强制 具有静态类型 Object 的可能 不相关的字符串类型。

那么,如何正确地将 JSON 传递给 .swf 并在 AS3 中将其解码为对象?

提前感谢您的帮助

【问题讨论】:

  • 你试过 JSON.encode() 代替吗? Decode 尝试将 JSON 格式的字符串解析为对象。 Encode 将 actionscript 对象转换为 JSON 格式的字符串。

标签: actionscript-3 json flashvars


【解决方案1】:

感谢您的回复..我昨天也发现了这一点,但无法回答我自己的问题 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 对象..感谢您的帮助!

【讨论】:

  • 不知道是不是这样,但是在提出问题的时候,现在我更不在乎 IE 支持..
【解决方案2】:

This page表明flashvars的正确用法是:

<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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多