对 JSON、PHP、AS3 不知所措:无法追踪正确的值

At a loss with JSON, PHP, AS3: Cannot trace correct value

我之前使用过 JSON 对象,它们工作得很好,但我之前制作的 JSON 对象来自于获取的 MySQL 条目。现在,我试图通过 PHP 中的数组创建自己的 JSON 对象,它在数据库中正确显示,但我无法像以前那样访问任何值。

$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\"}]"}

它在前面抛出 "chat",这是我的数据库中的列名,我不确定为什么。

当我追踪它时,我似乎只能通过

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

任何时候我试图引用说 messageArray.chat.chatusername 它 returns 一个错误。

很抱歉,我知道这可能是一个简单的解决方案,但我已经搜索并研究了几个小时。

非常感谢任何帮助!谢谢!

可能这与php端有关,当它编码你的数组时,它会用斜杠转义它,这会混淆你JS端的JSON解析。尝试将 JSON_UNESCAPED_SLASHES 选项添加到您的 json_encode 函数中,如下所示:

$inputArray = json_encode($chatArray, JSON_UNESCAPED_SLASHES);

查看 json_encode 函数文档了解更多详情: http://php.net/manual/en/function.json-encode.php

来自

$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() 传递该数组,您 双重编码 您的 JSON 字符串。

为了您的目的,您可能可以逃脱:

echo $result['chat'];

但是,如果您希望 chat 列名称包含在您的输出中,您必须先解码存储的 JSON:

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