我已经搜索了几个小时了,但我仍然不知道发生了什么。我是 PHP 新手,但对简单的 Flash 内容相当熟悉。
我使用 URLLoaders 等将 JSON 对象从 PHP 传递到 Flash AS3。这是我的 PHP 创建的测试 JSON 数组:
$objJSON = array('sample' => null);
$objJSON['sample'] = "TESTING";
$objJSON['sample2'] = "TESTING2";
$objJSON = json_encode($objJSON);
我将其返回到 flash
echo "arrayData=$jsonArray";
当我将其解析为 Flash 中的单个对象时,使用
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: 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 类中没有额外的 echo 。我只是被难住了。
已修复!
在评论的指导下,我基本上没有将 JSON 形成一个数组,而只是具有多个属性的对象。正确的做法是:
$objArray = array(
array(
"sample1" => "Testing!",
"sample2" => "Testing2!",
),
array (
"sample1" => "Testing!",
"sample2" => "Testing2!",
)
);
$objArray = json_encode($objArray);
最佳答案
我相信这是因为您的 JSON 正在解码为对象而不是数组。如果您使用非整数值作为数组键(即“sample”、“sample2”),就会发生这种情况。
我对 AS3 不太熟悉,但您可能需要将其转换为类似对象的实例而不是数组。
$objJSON = array('sample' => "TESTING", 'sample2' => "TESTING2");
echo json_encode($objJSON);
// Will output
{ "sample": "TESTING", "sample2": "TESTING2" }
这不是使用 JSON 的数组表示法。这是对象表示法。
希望这会有所帮助!
关于php - AS3、PHP 和 JSON - 解码一个对象没问题,数组返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692961/