【问题标题】:How do I create valid JSON from database rows如何从数据库行创建有效的 JSON
【发布时间】:2013-10-01 07:02:03
【问题描述】:

我不知道如何编写 PHP 来配合我的 JSON JavaScript 代码。我假设我需要它将每一行解析为一个主数组,为主数组分配一个从 1 到无穷大的唯一值键。但是,老实说,我已经看过了,但我不知道该怎么做。另外,如果您发现映射添加标记有任何问题,请告诉我。

PHP 代码:

 <?php
 include 'dbconnect.php';

 $result = mysql_query("SELECT * FROM coords ORDER BY name DESC") or die ("Could 
 not query");
 while($row = mysql_fetch_array($result)) {
 $r[] = array(
  "name" => $row['name'],
  "lat" => $row['lat'],
  "lng" => $row['lng'],
  "speed" => $row['speed'],
  "altitude" => $row['altitude'],
   "distance" => $row['distance']
);
}

$encoded = json_encode($r);
echo $encoded;

exit($encoded);

mysql_close($conn);

?> 

JAVASCRIPT 代码:

  var usermarker;
    var markloc;

    function deleteUserOverlay() {
        if (usermarker) {
            usermarker.setMap(null);
        }
    }

    function calluserlocation(){
     console.log('calluserlocation fires');
$.ajax( { 
url: "getdata.php",
type: "GET", 
dataType: "json", 
success: function(data) { for (var i = 0; i < data.length; i++) { markloc = new google.maps.LatLng(data[i].b, data[i].c); adddata(markloc); } }, error: function(data) { console.log( "error" ); } });
console.log("sucessful run of function");

}
   function adddata(markloc){ 
    marker = new google.maps.Marker({
    position: markloc,
     icon: 'http://www.wolfdoginfo.net/app/cropcircles.png',
    map: map
  });
deleteUserOverlay();
usermarker = marker;  
   }

我在控制台中遇到错误,我爸爸现在输出如下

[{"name":"test2","lat":"39.8441792","lng":"-105.104921","speed":"bad","altitude":"dontcare","distance": "whatever"},{"name":"test","lat":"39.729431999999996","lng":"-104.831919","speed":"speed","altitude":"altitude","distance" :"distance"},{"name":"grant3","lat":"39.729431999999996","lng":"-104.831919","speed":"speed","altitude":"altitude","distance ":"distance"},{"name":"grant2","lat":"test34","lng":"test34","speed":"speed","altitude":"altitude","distance ":"distance"},{"name":"grant","lat":"39.729431999999996","lng":"-104.831919","speed":"speed","altitude":"altitude"," distance":"distance"},{"name":"","lat":"39.75198511","lng":"-104.85021166","speed":"speed","altitude":"altitude"," distance":"distance"}][{"name":"test2","lat":"39.8441792","lng":"-105.104921","speed":"bad","altitude":"dontcare" ,"distance":"whatever"},{"name":"test","lat":"39.729431999999996","lng":"-104.831919","speed":"speed","altitude":"altitude ","距离":"距离"},{"name":"grant3","lat":"39.729431999999996","lng": "-104.831919","speed":"speed","altitude":"altitude","distance":"distance"},{"name":"grant2","lat":"test34","lng" :"test34","speed":"speed","altitude":"altitude","distance":"distance"},{"name":"grant","lat":"39.729431999999996","lng" :"-104.831919","speed":"speed","altitude":"altitude","distance":"distance"},{"name":"","lat":"39.75198511","lng" :"-104.85021166","speed":"speed","altitude":"altitude","distance":"distance"}]

所以现在我的 php 出于某种原因只正确输出了两次 但我的 json 代码不起作用。我需要为每个条目填充标记。

说明:

[01:57:52.768] GET http://wolfdoginfo.net/app/show/getdata.php [HTTP/1.1 200 OK 86ms]
[01:57:52.705] "calluserlocation fires"
[01:57:52.705] "sucessful run of function"
[01:57:52.826] "error"

【问题讨论】:

  • 你应该考虑使用 MySQLi 扩展,因为 mysql_* 自 PHP 5.5 起已被弃用

标签: javascript php mysql arrays json


【解决方案1】:

看起来您的 PHP 代码返回了无效的 JSON,因为它是一系列 json 字符串,而不是一个组合数组。

while($row = mysql_fetch_array($query)) {
    echo json_encode(array( "a" => $row['name'], "b" => $row['lat'], "c" => $row['lng'], "d" => $row['speed'], "e" => $row['altitude'], "f" => $row['distance']));
}
// this code will return this JSON
// { a:?, b:?, c:?, ... }
// { a:?, b:?, c:?, ... }
// ...

你应该将它们组合成一个数组并返回它。

$return = array();
while($row = mysql_fetch_array($query)) {
    $return [] = array( "a" => $row['name'], "b" => $row['lat'], "c" => $row['lng'], "d" => $row['speed'], "e" => $row['altitude'], "f" => $row['distance']));
}
echo json_encode($return);
// this code will return
// [
//    { a:?, b:?, c:?, ... },
//    { a:?, b:?, c:?, ... },
//    ...
// ]

这是一个对象数组,而不仅仅是松散的对象。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您应该将所有详细信息推送到一个数组中,然后将该数组编码为 json 字符串。您可以使用以下代码来实现:

    $details_array = array();
    while($row = mysql_fetch_array($query))
    {
    array_push($details_array, $row);//pushes all the fetched row data into $details_array
    }
    echo json_encode($details_array);
    

    【讨论】:

    • $row['name'], "lat" => $row['lat'], "lng" => $row['lng'], "speed" => $row['speed'], "altitude" => $row['altitude'], "distance" => $row['distance'] ); } $encoded = json_encode($r);回声$编码;退出($编码); mysql_close($conn); ?>
    • 我想请你再看一遍
    猜你喜欢
    • 2019-12-23
    • 2014-12-30
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多