2

私は数時間探し回っていますが、何が起こっているのかまだわかりません。私はPHPを初めて使用しますが、単純なFlashのものにはかなり慣れています。

URLLoaderなどを使用してPHPからFlashAS3にJSONオブジェクトを渡します。これはPHPで作成したテストJSON配列です。

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

フラッシュに戻します

echo "arrayData=$jsonArray";

これをフラッシュ内のSINGLEオブジェクトとして解析する場合、

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

出力として「TESTING」を取得します(textBox.text = tempJSON.sample; WAMP経由でローカルホストを使用)。これは正しいです。すべてが良さそうです、通信があり、JSONライブラリが正しく使用されており、オブジェクトがそこにあり、アクセス可能です...

しかし!私がそれを配列として扱うとき(それがそれであるため)、真上のコードを変更することによって(そして他に何も触れないで):

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

私は次のコンパイラエラーをスローします:

TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。com.adobe.serialization.json :: JSONTokenizer / nextChar()[.... \ json \ JSONTokenizer.as:545]で

localhostでswfを実行すると、文字列を取得していた場所に戻ることができません。データを配列のように扱うと、データが突然nullになるという初心者の間違いを犯していますか?

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 に答える