7

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"}]}

緯度と経度の値を引用符で囲んでいることに注意してください。

4

4 に答える 4

17

あなたも試すことができます

echo json_encode( $results, JSON_NUMERIC_CHECK );

いくつかの参照:

PHP JSON 定数

于 2012-07-10T03:01:42.500 に答える
2
$results[] = array(
  'latitude' => (float)$row['lat'],
  'longitude' => (float)$row['lng'],
  'address' => $row['address'],
  'project_ID' => $row['project_ID'],
  'marker_id' => $row['marker_id']
);

緯度と経度は浮動小数点数である必要がありますが、これを試すことができます

于 2012-07-10T03:03:23.713 に答える
1

PHP で MySQL からデータを取得すると、実際の値が何であれ、常に文字列が返されます。ただし、float への単純な型のキャストで問題が解決するはずです。

$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 などの文字列操作関数を使用してその場で引用符を削除します。

于 2012-07-10T03:06:13.333 に答える
0

parseInt()クライアント側でJavaScript を使用して、必要に応じて文字列値を整数に変換します。

typeof parseInt("56") # returns number
typeof "56" # returns string
于 2012-07-10T03:02:54.763 に答える