PHP JSON将输出编号编码为字符串

我正在尝试使用PHP和MySQL输出JSON字符串,但纬度和经度输出为带有值的引号的字符串。 当我尝试将标记添加到谷歌地图时,这会导致问题。

这是我的代码:

$sql = mysql_query('SELECT * FROM markers WHERE address !=""'); $results = array(); while($row = mysql_fetch_array($sql)) { $results[] = array( 'latitude' =>$row['lat'], 'longitude' => $row['lng'], 'address' => $row['address'], 'project_ID' => $row['project_ID'], 'marker_id' => $row['marker_id'] ); } $json = json_encode($results); echo "{\"markers\":"; echo $json; echo "}"; 

这是预期的输出:

 {"markers":[{"latitude":0.000000,"longitude":0.000000,"address":"2234 2nd Ave, Seattle, WA","project_ID":"7","marker_id":"21"}]} 

这是我得到的输出:

 {"markers":[{"latitude":"0.000000","longitude":"0.000000","address":"2234 2nd Ave, Seattle, WA","project_ID":"7","marker_id":"21"}]} 

请注意纬度和经度值周围的引号。

你也可以试试

 echo json_encode( $results, JSON_NUMERIC_CHECK ); 

一些参考:

PHP JSON常量

 $results[] = array( 'latitude' => (float)$row['lat'], 'longitude' => (float)$row['lng'], 'address' => $row['address'], 'project_ID' => $row['project_ID'], 'marker_id' => $row['marker_id'] ); 

纬度和经度应该是一个浮点数,但你可以尝试这个

以下是您可能不知道的事情:在PHP中从MySQL中检索数据时,无论实际值是多少,您都将返回字符串。 一个简单的类型转换浮动应该解决问题但是:

 $sql = mysql_query('SELECT * FROM markers WHERE address !=""'); $results = array(); while($row = mysql_fetch_array($sql)) { $results[] = array( 'latitude' => (float) $row['lat'], 'longitude' => (float) $row['lng'], 'address' => $row['address'], 'project_ID' => $row['project_ID'], 'marker_id' => $row['marker_id'] ); } $json = json_encode($results); echo "{\"markers\":"; echo $json; echo "}"; 

或者,因为浮点数可能不足以存储纬度/经度坐标,所以将它们存储为字符串并使用字符串操作函数(如str_replace)动态删除引号。

做就是了:

 echo str_replace('"','',$json); 

这应该工作。

有效的JSON必须在双引号内包含值和键。 双引号有什么问题?

在客户端使用javascripts parseInt()将字符串值转换为必要的整数:

 typeof parseInt("56") # returns number typeof "56" # returns string