【问题标题】:Pushing data to a JSON generated with json_encode将数据推送到使用 json_encode 生成的 JSON
【发布时间】:2017-02-01 22:09:31
【问题描述】:

如果我不尝试将某些内容推送到 $dataJson,那么在以下几行中一切正常。

    $reponse = $bdd->query("SELECT Comp_Name,Comp_Email 
        FROM Company");

    while ($donnees = $reponse->fetchAll(PDO::FETCH_ASSOC)) {
        $dataJson = json_encode($donnees);
        $dataJson.push({Col1:'Company Name',Col2:'Email'});
        echo $dataJson;
    };

我想将最后一个对象添加到 json_encode 生成的对象数组中。

我可能遗漏了一些简单的东西,因为我在互联网上找到的每个提示都未能解决我的问题。

谢谢

【问题讨论】:

  • $dataJson.push() 不是 PHP 语法。

标签: php mysql json object push


【解决方案1】:

首先,您不需要循环调用fetchAll()。它一次获取所有结果。

接下来,您似乎正在将 Javascript 语法混合到您的 PHP 中。 PHP 不使用 .shift() 来添加到数组中,或者使用 {} 作为对象的语法。

接下来,您不推送到 JSON,而是推送到数组,然后将数组编码为 JSON。

如果您希望列标题位于数组的开头,则应使用array_unshift(),而不是array_push()

应该是这样的:

$donnees = $response->fetchAll(PDO::FETCH_ASSOC);
array_unshift($donnees, array('Col1' => 'Company Name', 'Col2' => 'Email'));
$dataJson = json_encode($donnees);
echo $dataJson;

【讨论】:

  • 在添加循环后测试某些内容时,我得出了错误的结论。确实没用。我确实经常混合语法,谢谢。我工作完美!
【解决方案2】:

json_encode 将数组转换为字符串。您不能将任何内容推送到字符串,并且您尝试连接,您最终不会得到无效的 json。改为这样做。

$reponse = $bdd->query("SELECT Comp_Name,Comp_Email 
        FROM Company");

$data=array();
while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) {
    $data[]=$donnees;
};
echo json_encode($data);

【讨论】:

  • 谢谢。我使用了其他解决方案,但您的回答也帮助我消除了一些误解。
猜你喜欢
  • 2022-01-24
  • 2016-06-20
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多