【问题标题】:How to correctly format JSON using PHP如何使用 PHP 正确格式化 JSON
【发布时间】:2018-08-25 13:22:39
【问题描述】:

我正在尝试使用 PHP 创建一个 RESTful API。我无法以我习惯看到的方式对其进行格式化。希望得到一些指导。谢谢。

这是当前的 JSON 输出:

 [
    {
        "boardID": "12345",
        "MQ9": "673627",
        "MQ131": "87565",
        "MQ135": "67887",
        "longitude": "51.504425",
        "latitude": "-0.1291608",
        "time": "13:32",
        "date": "2018-03-14"
    },

这就是我想要实现的目标:

{
    "data": [
        {
        "boardID": "12345",
        "MQ9": "673627",
        "MQ131": "87565",
        "MQ135": "67887",
        "longitude": "51.504425",
        "latitude": "-0.1291608",
        "time": "13:32",
        "date": "2018-03-14"
   },

这是我的 PHP:

<?php
  require 'connect.php';

  if(!$con){ 
  die('Could not connect: '.mysqli_error()); 
  } 

  $result = mysqli_query($con, "SELECT * FROM airQual"); 

  while($row = mysqli_fetch_assoc($result)
  { 
  $output[]=$row; 
  } 

  echo(json_encode($output, JSON_PRETTY_PRINT)); 

  mysqli_close($con);

  ?>

【问题讨论】:

  • 试试$output["data"][] = $row;
  • 使用json_decode()作为第一个参数,使用TRUE作为第二个参数来获取你需要获取的数组。更改代码以构造此数组。阅读PHP arrays 并练习与他们合作。
  • 我可以看到您有 2 个明显的语法错误。

标签: php mysql json rest api


【解决方案1】:

试试这个:

<?php
  require 'connect.php';

  if(!$con){ 
  die('Could not connect'); 
  } 

  $result = mysqli_query($con, "SELECT * FROM airQual"); 

  while($row = mysqli_fetch_assoc($result))
  { 
  $output['data'][]=$row; 
  } 

  echo(json_encode($output, JSON_PRETTY_PRINT)); 

  mysqli_close($con);

  ?>

【讨论】:

    【解决方案2】:

    您可以通过以下几种方法之一执行此操作,但最简单的方法是执行此操作,将您的输出添加到另一个数组:

    $data = array('data' => $output);
    echo(json_encode($data, JSON_PRETTY_PRINT)); 
    

    例如:

    $output = array('foo'=>1,'bar'=>2,'glorp'=>3);
    $data = array("data" => $output);
    echo(json_encode($data, JSON_PRETTY_PRINT)); 
    

    返回

    {
        "data": {
            "foo": 1,
            "bar": 2,
            "glorp": 3
        }
    }
    

    您也可以按照其他人的建议将输出添加到另一个数组,这样:

    $output['data'] = array('foo'=>1,'bar'=>2,'glorp'=>3);
    echo(json_encode($output, JSON_PRETTY_PRINT)); 
    

    这将为您带来与上述相同的回报。

    注意

    您的代码中有错字:

    while($row = mysqli_fetch_assoc($result) // missing closing )
    

    mysqli_error() 需要连接:

     die('Could not connect: '.mysqli_error($con)); 
    

    【讨论】:

    • 感谢您的回复。我认为 $data 是一个对象而 $output 是一个数组,我对吗?请原谅我的无知,我对此很陌生。
    • 两者都可以。在您的代码中,$output 是一个数组。在我的示例中,$data 也是一个数组。你只是从你的数据库中获取一个数组,所以我这里只把它当作一个数组来处理。
    • 感谢您的解释!并指出我正确的方向!非常感谢!
    【解决方案3】:

    输出是正确的,因为您正在创建一个数组。如果你想要一个对象,就创建一个对象!

    做一些类似的事情;

    $myOuput = new stdClass;
    $myOuput->data = $output;
    json_encode($myOutput);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2021-04-24
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多