PHP JSON 将输出数字编码为字符串
Posted
技术标签:
【中文标题】PHP JSON 将输出数字编码为字符串【英文标题】:PHP JSON encode output number as string 【发布时间】:2012-07-09 11:56:33 【问题描述】:我正在尝试使用 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"]
注意纬度和经度值周围的引号。
【问题讨论】:
【参考方案1】:你也可以试试
echo json_encode( $results, JSON_NUMERIC_CHECK );
一些参考:
PHP JSON constants
【讨论】:
这些 JSON_* 常量的要求非常高 :) 请注意,这只适用于 PHP >=5.3。如果您需要支持旧版本(在撰写本文时许多站点运行 PHP 5.2),@Allen Chak 的响应非常好【参考方案2】:$results[] = array(
'latitude' => (float)$row['lat'],
'longitude' => (float)$row['lng'],
'address' => $row['address'],
'project_ID' => $row['project_ID'],
'marker_id' => $row['marker_id']
);
纬度和经度应该是一个浮点数,但你可以试试这个
【讨论】:
我喜欢这种方法。它只转换需要的值。【参考方案3】:你可能不知道:在 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)动态删除引号。
【讨论】:
【参考方案4】:在您的客户端使用 javascripts parseInt()
在必要时将字符串值转换为整数:
typeof parseInt("56") # returns number
typeof "56" # returns string
【讨论】:
以上是关于PHP JSON 将输出数字编码为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何使JSONObject的toString()将UTF-8字符编码为unicode,就像在PHP的json_encode中一样?