使用 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()的使用方法

PHP中json_decode()和json_encode()的使用方法

PHP json_encode( ) 函数介绍

如何在 PHP:json_encode 中使用 UTF-8

PHP json_encode 变量如何转换成数组?

json_encode() 删除属性 (PHP)