2017-10-21 9 views
0

以前はJSONオブジェクトを使用していましたが、それらは完全に動作しますが、以前に作成したJSONオブジェクトはフェッチされたMySQLエントリの結果でした。今、私は自分のJSONオブジェクトをPHPの配列を通して作成しようとしていますが、データベースに正しく表示されますが、以前のような値にはアクセスできません。JSON、PHP、AS3で紛失:正しい値をトレースできない

$chatArray = array(
array(
    'chatusername' => 'Troy', 
    'chatuserid' => '123', 
    'chatmessage' => 'Hello World' 
), 

array(
    'chatusername' => 'Nick', 
    'chatuserid' => '124', 
    'chatmessage' => 'Testing' 
)); 

$ inputArray = json_encode($ chatArray);

これは私がデータベースに入力したもので、うまくいきます。それから私は、別の.phpでそれを呼び出すと、それは私がなぜわからない私のデータベース内の列名である「チャット」アウトフロントをスローこの

{"chat":"[{\"chatuserid\": \"123\", \"chatmessage\": \"Hello World\", \"chatusername\": \"Troy\"}, {\"chatuserid\": \"124\", \"chatmessage\": \"Testing\", \"chatusername\": \"Nick\"}]"} 

を取得します。私はそれをトレースすると

私だけ

var messageArray:Object = JSON.parse(event.target.data); 
trace(messageArray.chat); 

で、私はそれがエラーを返しmessageArray.chat.chatusername言う参照しようとするたびにそれをトレースするように見えることができます。

私はそれがおそらく単純な解決策であることを知っていますが、私は数時間前から検索しています。

ご協力いただきありがとうございます。ありがとうございました!

+0

私は思う*最初のメッセージには 'messageArray.chat [0] .chatusername'、2番目のメッセージには' messageArray.chat [1] .chatusername'が必要です。または私は何かを逃していますか? – rickdenhaan

+0

これは私が思ったものですが、エラーを返します。ReferenceError:エラー#1069:Stringにプロパティ0が見つかりません。デフォルト値はありません。 –

+0

ああ、そうです。 JSON出力が正しくありません。 'messageArray.chat'の内容は実際にはJSONでエンコードされた文字列です。 'JSON.parse'を個別に行うか、その出力を生成するPHPファイルを修正する必要があります。 – rickdenhaan

答えて

0

the PHP code that generates your JSON outputから:

$stmt = $conn->prepare("SELECT chat FROM markerinfo WHERE markerid='$chatid'"); 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
echo json_encode($result); 

ことに留意してくださいchatデータベースの列にJSON文字列が含まれています。

このコードは、データベース内のJSON文字列をデコードしていないが、そう$resultは同様にJSON文字列を含む配列になります。

$result = [ 
    'chat' => '[{"chatusername":"Troy","chatuserid":"123","chatmessage":"Hello World"},{"chatusername":"Nick","chatuserid":"124","chatmessage":"Testing"}]' 
]; 

json_encode()を通じてその配列を渡すことによって、あなたは二重のです-encodingあなたのJSON文字列。あなたの目的のために

、あなたはおそらくで逃げることができます。

echo $result['chat']; 

しかし、あなたはあなたの出力に含まれるchat列名をしたい場合には、最初に保存されたJSONをデコードする必要があります。

$result['chat'] = json_decode($result['chat']); 
echo json_encode($result); 
+0

ああ輝かしい 'エコー$結果['チャット'];'トリックでした。どうもありがとうございます! –

0

おそらく、これは配列をエンコードするときにphp側に関連しています。スラッシュでエスケープすると、JS側でJSON解析が混乱します。このようなあなたのjson_encode機能にJSON_UNESCAPED_SLASHESオプションを追加しよう:

$inputArray = json_encode($chatArray, JSON_UNESCAPED_SLASHES); 

チェックjson_encode機能の詳細は、ドキュメント: http://php.net/manual/en/function.json-encode.php

+0

を言って、あなたは '$ inputArray'の結果を印刷してみてくださいましたか?バックスラッシュのエスケープがどこから来ているのかを確認する必要があります。 'json_encode'でなければ、コンテンツ自体をエスケープするmysqlクエリになる可能性があります。挿入コードを私たちと共有していただけますか? –

+0

@TroyMyersしようとした不正な解析入力 –

+0

助けてくれてありがとう! rickdenhaanはそれを解決しました –

関連する問題