对 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);
我之前使用过 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);