2014-01-12 63 views
0

我目前使用的是第三方API。我有一些diffulties格式化我的db值到json對象中。如果它們處於特定格式,api會接受這些值。在下面的php代碼中,我使用foreach循環來獲取結果。然後array_push將值放入數組中。我收到字符串數據而不是數字coordinates。最後,我沒有得到理想的結果。我如何格式化json對象,使其看起來像下面的例子?PHP的JSON編碼 - 對JSON格式特定對象

當前結果:

{ 
coordinates: [ 
"-121.2808, 38.3320" 
], 
attributes: "Sacramento" 
}, 

所需的結果:

{ 
    coordinates: [-121.2808, 38.3320], 
    attributes: { 
     name: 'Sacramento' 
    } 
}, 

PHP循環和json_encode

header("Content-type: application/json"); 
//get the course list 
$location_query = $db_con->prepare("SELECT city, X(location) as latitude, Y(location) as longitude 
FROM company 
"); 
$location_query->execute(); 
$data = $location_query->fetchAll(); 
$output = array(); 
foreach ($data as $row) { 
    array_push($output, array('coordinates'=>array($row["latitude"].",".$row["longitude"]), 'attributes'=>$row["city"])); 


}// foreach ($data as $row) { 
echo json_encode($output); 

回答

5

你需要得到該字符串的浮點表示,嘗試使用或者floatval或將它鑄造成漂浮物。

floatval

floatval($row["latitude"]) 

鑄造

(float) $row["latitude"] 

這樣做對經度和緯度。

而且由於某種原因,你是建設有它一個逗號的字符串。爲了產生正確的表示,它應該看起來像這樣。

array_push($output, array(
    'coordinates' => array((float) $row["latitude"], (float) $row["longitude"]), 
    'attributes' => array('name' => $row["city"])) 
)); 

帶鍵的數組表示對象,因此該數組具有鍵值>值。

編輯:感謝邁克指出屬性錯誤,太專注於鑄造:)

+2

關閉。你需要''attributes'=> array('name'=> $ row [「city」]))' – Mike

+0

@Mike謝謝! :) – SamV

+0

謝謝!現在它是有道理的。我會用float。 – techAddict82