2

我已经四处搜寻了几个小时,但我仍然不知道发生了什么。我是 PHP 新手,但对简单的 Flash 内容相当熟悉。

我使用 URLLoaders 等将一个 JSON 对象从 PHP 传递到 Flash AS3。这是我的 PHP 创建的测试 JSON 数组:

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

我把它还给闪光灯

echo "arrayData=$jsonArray";

当我将其解析为 Flash 中的 SINGLE 对象时,使用

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

我得到“TESTING”作为我的输出(textBox.text = tempJSON.sample; 通过 WAMP 使用 localhost),这是正确的。一切看起来都很好,有通信,JSON 库使用得当,对象在那里并且可以访问......

但!当我将它视为一个数组时(因为它就是这样),将上面的代码直接更改为:

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

我抛出一个编译器错误:

TypeError:错误 #1009:无法访问空对象引用的属性或方法。在 com.adobe.serialization.json::JSONTokenizer/nextChar()[....\json\JSONTokenizer.as:545]

在 localhost 中运行 swf 让我无法返回以前获取字符串的位置。当我将数据视为数组时,我是否犯了一些新手错误,即数据突然变为空?

我已经通过 PHP 中的输出检查了我的 JSON 的有效性并检查了出来。我确保在调用的 PHP 类中没有额外的回声。我只是难过。

修复!

在评论的指导下,我基本上没有将我的 JSON 形成一个数组,只是具有多个属性的对象。正确的做法是:

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


$objArray = json_encode($objArray);
4

1 回答 1

2

我相信这是因为您的 JSON 正在解码为对象而不是数组。如果您使用非整数值作为数组键(即“sample”、“sample2”),就会发生这种情况。

我对 AS3 并不太熟悉,但您可能需要将其转换为类似对象的实例而不是数组。

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

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

不是使用 JSON 的数组表示法。它是对象符号。

我希望这有帮助!

于 2012-12-03T22:37:58.307 回答