【问题标题】:AS3, PHP & JSON - Decoding one object is fine, an array returns nullAS3、PHP 和 JSON - 解码一个对象很好,数组返回 null
【发布时间】:2012-11-21 11:48:29
【问题描述】:

我已经四处寻找了几个小时,但我仍然不知道发生了什么。我是 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 中的 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 类中没有额外的回声。我只是被难住了。

修复!

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

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


$objArray = json_encode($objArray);

【问题讨论】:

  • 请同时添加您的 JSON 示例。

标签: php json actionscript-3 flash


【解决方案1】:

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

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

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

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

这是 not 使用 JSON 的数组表示法。它是对象表示法。

我希望这会有所帮助!

【讨论】:

  • 是的,Javascript(还有 ActionScript,应该是一样的)不像 PHP 那样对待数组和对象。如果你有从 0 开始的数字索引,没有间隙,你会得到一个数组。其他任何内容,包括作为键的文本字符串:对象。
  • 谢谢,原来如此。我没有正确地将我的 JSON 对象形成为要正确解析的数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多