Php json编码 - json对象的特定格式

tec*_*t82 0 php arrays json

我目前正在使用第三方API.我有一些困难将我的db值格式化为json对象.如果它们处于某种格式,api会获取值.在下面的PHP代码中,我使用foreach循环来获取结果.然后array_push将值放在数组中.我正在获取字符串数据而不是数字coordinates.最后,我没有得到理想的结果.如何将json对象格式化为如下例所示?

目前的结果:

{
coordinates: [
"-121.2808, 38.3320"
],
attributes: "Sacramento"
},
Run Code Online (Sandbox Code Playgroud)

期望的结果:

{
    coordinates: [-121.2808, 38.3320],
    attributes: {
        name: 'Sacramento'
    }
},
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

Sam*_*amV 5

您需要获取该字符串的浮点表示,尝试使用floatval或将其转换为浮点数.

floatval

floatval($row["latitude"])
Run Code Online (Sandbox Code Playgroud)

铸件

(float) $row["latitude"]
Run Code Online (Sandbox Code Playgroud)

这样做适用于纬度和经度.

出于某种原因,您正在构建一个带逗号的字符串.要产生正确的表示,它应该是这样的.

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

带键的数组表示对象,因此数组带有key => value.

编辑:感谢Mike指出属性错误,太专注于投射:)

  • 关.你需要''attributes'=> array('name'=> $ row ["city"]))` (2认同)