使用 PHP json_encode() 和 MySQL 返回一个 JSON 对象以传递给 jQuery 函数 [重复]
Posted
技术标签:
【中文标题】使用 PHP json_encode() 和 MySQL 返回一个 JSON 对象以传递给 jQuery 函数 [重复]【英文标题】:Return a JSON object using PHP json_encode() & MySQL to pass to jQuery function [duplicate] 【发布时间】:2011-05-29 06:52:54 【问题描述】:我正在尝试从 mysql 结果创建一个 json 对象,但没有得到我需要的结果。
这里是 PHP
$json = array();
$result = mysqli_query ($connection, $query);
echo '[';
while($row = mysqli_fetch_array ($result))
echo '';
echo '"latitude":"'.$row['lat'].'",';
echo '"longitude":"'.$row['lng'].'",';
echo '"icon":'.'"./images/'.$row['busColor'].'.png"';
echo '';
echo ']';
$jsonstring = json_encode($json);
echo $jsonstring;
die();
它输出这个
["latitude":"39.976257","longitude":"-83.003464","icon":"./images/pink.png"][]
但我想要这个
["latitude":"39.976257","longitude":"-83.003464","icon":"./images/pink.png"]
一旦我得到结果,我需要将对象传递给 jQuery 插件函数,如果这有什么不同的话
$.getJSON('myJsonURL, function(myMarkers)
$("#map").goMap(
markers: myMarkers
);
);
谢谢
【问题讨论】:
输出的不是你想要的对象吗?不是数组?.. 【参考方案1】:我想正确的做法是:
$json = array();
$result = mysqli_query ($connection, $query);
while($row = mysqli_fetch_array ($result))
$bus = array(
'latitude' => $row['lat'],
'longitude' => $row['lng'],
'icon' => './images/' . $row['busColor'] . '.png'
);
array_push($json, $bus);
$jsonstring = json_encode($json);
echo $jsonstring;
die();
【讨论】:
这非常有效,并演示了如何按照 David 的解释进行操作。输出看起来像这样["latitude":"39.992989","longitude":"-249.090057","icon":".\/images\/pink.png"
。那么 json_encode 会自动转义斜杠吗?有没有办法抑制这种情况?我不需要,只是好奇。
是的,斜线是默认添加的。你可以试试urlencode('./images/')
和urldecode(json_encode($json))
- 但这有点乱!【参考方案2】:
你手动输出你的 json,然后你在一个空的 array() - $json 上调用 json_encode
json_encode() 输出 [] 你传递一个空数组,所以你的最后一个 [] 来自这里$jsonstring = json_encode($json);
echo $jsonstring;
编辑:更多关于 json_encode json_encode php manual
【讨论】:
@OctoPaul 我走这条路是因为它对我来说阻力最小。我将最后一个echo
更改为 echo ',';
,因为 JSLint 不喜欢这种语法。我在结束 ]
之前多了一个逗号,但是 jQuery 会解析它。
看看另外两个答案,最好把你所有的数据放在一个数组里,然后在那个数组上调用json_encode——这样你的json才会有效
谢谢保罗,我更新了正确答案。你的方法把我带到了我想去的地方,所以它仍然是一个有效的答案。【参考方案3】:
首先定义一个数组。
然后您手动生成一些 JSON。
然后将数组转换为 JSON 并输出。
将 while 循环中和边缘的所有 echo 语句替换为代码以生成包含数据的关联数组,然后将其插入到 $json 中。
【讨论】:
我可能应该走这条路,但我是 PHP 的相对菜鸟,所以我现在走的是更简单的路线。特别是因为在我所在的城镇是凌晨 3 点 43 分。谢谢(你的)信息。 +1 那是更容易的路线。将字符串组合在一起迟早会生成无效的 JSON。 我想了这么多,但在研究了一段时间之后,我一直在寻找一个快速而肮脏的修复方法。我使用@RabidFire 提供的示例采用了您的方法。以上是关于使用 PHP json_encode() 和 MySQL 返回一个 JSON 对象以传递给 jQuery 函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
php中json_decode()和json_encode()的使用方法