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

时间:2012-07-10 02:56:22

标签: php jquery 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"}]}

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

6 个答案:

答案 0 :(得分:17)

您也可以尝试

echo json_encode( $results, JSON_NUMERIC_CHECK );

一些参考:

PHP JSON constants

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

以下是您可能不知道的事情:在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)即时删除引号。

答案 3 :(得分:0)

只是做:

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

这应该有效。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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