如何处理包含数字字符串的JSON

时间:2016-08-02 15:32:11

标签: javascript php mysql json

我使用以下PHP代码从Web服务器中提取JSON数据

 $result = mysql_query("select lat,lng from gpsdata limit 10");
 $rows = array();
 while($r = mysql_fetch_assoc($result)) {
  $rows[] = $r;
 }

 print json_encode($rows);

我正在使用Javascript来获取此数据

 $.getJSON('returngps.php').done(function(data) {
    for (var i=0;i< data.length;i++ ){
    console.log(data[i]);
    }
  }

我的问题是我收到的数据。我目前得到的输出是:

   {lat: "53.399793333333", lng: "-6.3844516666667"}

我想要合作的是:

   {lat: 53.399793333333, lng: -6.3844516666667}

有没有办法转换它?

2 个答案:

答案 0 :(得分:2)

问题是从MySQL到PHP的数字检索导致它们被转换为字符串。 (我讨厌PHP和MySQL之间的关系不尊重类型!)然后,JSON序列化适当地维护字符串类型。

因此,您需要在检索时将值转换为浮点数。这将导致JSON序列化将值视为数字而不是字符串,并且在接收JS中不需要任何荒谬的字符串操作或关于数据类型的假设。

$result = mysql_query("select lat,lng from gpsdata limit 10");
$rows = array();
while($r = mysql_fetch_assoc($result)) {
    $r['lat'] = (float) $r['lat'];
    $r['lon'] = (float) $r['lon'];

    $rows[] = $r;
}

答案 1 :(得分:1)

尝试使用parseFloat

data[i].lat = parseFloat(data[i].lat);
data[i].lng = parseFloat(data[i].lng);