【问题标题】:Format JSON Objects to an array of JSON Objects将 JSON 对象格式化为 JSON 对象数组
【发布时间】:2014-07-09 03:17:09
【问题描述】:

我已经在 Google 上搜索了一段时间,但还没有找到我想要的。

从服务器上的 REST API,我收到了这个响应:

{"hours":6,"day":"FRI"}{"hours":3,"day":"WEDS"}{"hours":6,"day":"MON"}{"hours":9,"day":"THUR"}{"hours":12,"day":"TUES"}{"hours":3,"day":"FRI"}

这只是一长串 JSON 对象。如何让这些对象在 PHP 中作为 JSON 对象数组返回?

[ {"hours":6,"day":"FRI"}, {"hours":3,"day":"WEDS"}, {"hours":6,"day":"MON"}, {"hours":9,"day":"THUR"}, {"hours":12,"day":"TUES"}, {"hours":3,"day":"FRI"} ]

我使用的是 Slim 框架,主要是处理路由调用。

我的PHP如下:

function getHoursbyId($id) {

    $app = \Slim\Slim::getInstance();

    $query = 'SELECT hours, day FROM prof_hours
              JOIN professors ON professors.id=prof_hours.prof_id
              WHERE professors.id=?;';

    $stmt = $this->connection->prepare($query);
    $stmt->bind_param("i", $id);

    if($stmt->execute()) {
        $stmt->bind_result($hours, $day);

        while ($stmt->fetch()) {
            $result['hours'] = $hours;
            $result['day'] = $day;

            echo jsonResponse('200', $result);

        }

        $stmt->close();

        return $result;
    } else {
        return NULL;
    }

}

$result是一个数组,传入函数jsonResponse()

function jsonResponse($httpStatus, $response) {
$app = \Slim\Slim::getInstance();
$app->status($httpStatus);

$app->contentType('application/json');

echo json_encode($response);
}

我假设 jsonResponse 中的某个地方是我的问题,但我将如何解决这个问题?

【问题讨论】:

    标签: php arrays json slim


    【解决方案1】:

    如何修复 PHP 脚本:

    现在您将分别打印每个项目。

    相反,构建一个数组,并在最后用json_encode() 回显它。

    $items = array();
    
    // adding (in the loop)
    $items[] = array('hours'=>$hours, 'day'=>$day);
    
    // at the end
    echo json_encode($items);
    

    然后您将获得有效的 JSON 响应。

    【讨论】:

      【解决方案2】:

      看起来您正在为每一行回显 jsonResponse。因此,目前对于您从数据库中获取的每一行,您都要求您的应用程序回显其json_encode'd 值。这就是为什么你会得到一个非分隔的 json 对象字符串。

      您需要做的是将所有行构建到 1 个数组中,然后将其发送到输出函数。

      试试:

      ...
      
      $results = array();
      while ($stmt->fetch()) {
          $results[] = array(
              'hours' => $hours,
              'day' => $day
          );
      }
      echo jsonResponse('200', $results);
      ...
      

      【讨论】:

        猜你喜欢
        • 2021-02-28
        • 2017-07-30
        • 2018-10-26
        • 2015-05-10
        • 2020-09-01
        • 1970-01-01
        • 2018-12-06
        • 2014-03-05
        • 2022-01-10
        相关资源
        最近更新 更多