如何手动控制json_encode?

时间:2017-06-30 14:51:30

标签: php json

我想在地图上显示一些数据。要做到这一点,我必须将它放入这样的JSON文件中(因为谷歌地图):

{
"id": 1,
"picture": "cité.jpg",
"name": "Cité",
"category": "green",
"address": "52 rue de la victoire",
"about": "Cité en 1935",
"location": {
  "latitude": "48.8757197",
  "longitude": "2.3350033000000394"
},
}

经纬度为" location" 但今天我的PHP代码(

$db = mysqli_connect("localhost", "root", "", "parisdb");
    $reponse = $db->query('SELECT * FROM paristable');
    while ($donnees = $reponse->fetch_assoc()){
        $data[]= $donnees;
    }
    $encode_donnees = json_encode($data);
    echo $encode_donnees;

)告诉我这样的事情:

{"ID":"1","picture":"cit\u00e99.jpg","name":"cit\u00e9",
"about":"cit\u00e9 en 1935","adress":"52 rue de la victoire","category":"green",
"latitude":"48.8757197","longitude":"2.3350033000000394"}

有没有办法在PHP中做到这一点?或者我必须在MYSQL中执行此操作? 提前谢谢你:)

3 个答案:

答案 0 :(得分:2)

您可以在while

之后使用此代码
  }

  $data['location']= [$data['latitude'], $data['longitude']];
  unset($data['latitude']);
  unset($data['longitude']);

  $encode_donnees = json_encode($data);
  echo $encode_donnees;

答案 1 :(得分:1)

您可以通过创建一个类似于

的数组来实现此目的
$a = [
    "id"=> 1,
    "picture"=> "cité.jpg",
    "name"=> "Cité",
    "category"=> "green",
    "address"=> "52 rue de la victoire",
    "about"=> "Cité en 1935",
    "location"=> [
        "latitude"=> "48.8757197",
        "longitude"=> "2.3350033000000394"
    ]
];

然后拨打json_encode($a)

答案 2 :(得分:0)

我想谈谈如何在没有太多问题的情况下解决这类问题,而不是如何解决这个特殊情况,其他人比我做得更快,也许更好。

在这种情况下,var_export是您的朋友:

这是一个经常被忽视的函数,它输出变量的字符串表示。换句话说,它会打印您要编写的代码,以创建您作为参数传递的变量。

如果您获得了输出数据的样本,就像您已经拥有的那样,进行导出 一个编码,让php数组将以你需要的格式解码。

如果你写一个像这样的简单脚本

<?php 

  // lets discover what php array will produce the desired output format

  $sample_of_output_format = '{
    "id": 1,
    "picture": "cité.jpg",
    "name": "Cité",
    "category": "green",
    "address": "52 rue de la victoire",
    "about": "Cité en 1935",
    "location": {
      "latitude": "48.8757197",
      "longitude": "2.3350033000000394"
    } 
  }';

var_export(json_decode($sample_of_output_format, true));
?>

然后运行它,你会得到

array (
  'id' => 1,
  'picture' => 'cité.jpg',
  'name' => 'Cité',
  'category' => 'green',
  'address' => '52 rue de la victoire',
  'about' => 'Cité en 1935',
  'location' => 
  array (
    'latitude' => '48.8757197',
    'longitude' => '2.3350033000000394',
  ),
)

此时,您只需复制代码中的输出,用您的数据库字段名称替换样本数据并保留结构。

您将轻松获得类似于以下功能的功能,您可以在代码中使用该功能来解决您的偶然问题。

function encode_for_google_map($dbrow) {
    $result = array (
      'id' => $dbrow['id'],
      'picture' => $dbrow['picture'],
      'name' => $dbrow['name'],
      'category' => $dbrow['category'],
      'address' => $dbrow['address'],
      'about' => $dbrow['about'],
      'location' => 
      array (
        'latitude' => $dbrow['latitude'],
        'longitude' => $dbrow['longitude'],
      ),
    );
    return json_encode($result);
}

并且您的代码变为

$db = mysqli_connect("localhost", "root", "", "parisdb");
    $reponse = $db->query('SELECT * FROM paristable');
    while ($donnees = $reponse->fetch_assoc()){
        $data[]= $donnees;
    }
    $encode_donnees = array_map(encode_for_google_map, $data);
    echo $encode_donnees;

您甚至可以保存您编写的帮助程序脚本作为将来的参考。

参考