我不确定如何调试它。我从数据库中得到一个数组,它返回正常,但是当我尝试在其上使用json_encode时,它返回空白。任何帮助,不胜感激。
<?php
header('Content-Type: text/html; charset=utf-8');
$servername = "localhost";
$username = "username";
$password = "password";
mysql_connect($servername, $username, $password) or die(mysql_error());
mysql_select_db("places") or die(mysql_error());
$result = mysql_query("SELECT Location, Latitude, Longitude FROM places WHERE Latitude IS NOT NULL GROUP BY Location, Latitude, Longitude");
$places = array();
while (($row = mysql_fetch_array($result, MYSQL_NUM)) !== false) {
$places[] = $row;
}
$json = json_encode($places, JSON_UNESCAPED_UNICODE);
echo $json;
?>
在 places [] 中返回的内容的示例为:
Array
(
[0] => Array
(
[0] => testPlace1
[1] => 50.1019
[2] => -75.0263
)
[1] => Array
(
[0] => testPlace2
[1] => 130.4834
[2] => 48.3428
)
[2] => Array
(
[0] => testPlace3
[1] => 23.3003
[2] => -48.3201
)
...
....
这种情况还在继续。有些包含 unicode 字符,这是我的初始字符,所以我在 php 代码中添加了一些东西来提供帮助,但我不确定它是否正确。
问题是你用了两次json_encode。您无法json_encode已经是 json 字符串的内容。
另请记住,这些 mysql 函数已被弃用。我建议你使用PDO。
更新
显然,您在位置中有一些特殊的字母表。您可以通过以下方式将它们编码为 utf8:
$places = array_map(function($place) {
$place[0] = utf8_encode($place[0]);
return $place;
}, $places );
至于JSON_UNESCAPED_UNICODE
,在你解码json之后,Unicode转义将被映射到相应的UTF-8字符串。因此,您通常不需要它。
如果出现 utf8 问题,您可以使用字符集进行数据库连接
$connection = mysqli_connect($servername, $username, $password);
mysqli_set_charset($connection,'utf8');
你的代码是正确的。只是我已经检查过了。我在上述格式的 http://jsonlint.com/中获得了这种格式的 JSON 输出,它是有效的。
[['"Test1'",'"50.1019'",'"-75.0263'"],['"testPlace2'",'"130.4834'",'"48.3428'"]]
同样,您只需运行代码并在以下位置检查 json 输出:http://jsonlint.com/它可能会对您有所帮助。