PHP JSON 用逗号和括号编码

PHP JSON encode with commas and brackets

我有一个 php 脚本来创建一个 json 从 mysql 数据库获取数据的输出:

<?php
include("myconnection.php");

//Creamos y ejecutamos la consulta
$sql = "SELECT * FROM myTable where value='1003'";
$result=mysql_query($sql);

while($row = mysql_fetch_array($result)){
    $value1 = $row['value1'];
    $value2 = $row['value2'];

$data =  json_encode(
  array("value1" => $value1, 
  "value2" => $value2));

echo $data;
}

?>

我得到这样的结果:

{"value1":"847534837","value2":"Regular"}{"value1":"847534838","value2":"Regular"}

我想得到一个带有括号和逗号的结果,如下所示:

[{"value1":"847534837","value2":"Regular"},{"value1":"847534838","value2":"Regular"}]

我试过像这样放一些回声句:

echo "[";
while($row = mysql_fetch_array($result)){
$value1 = $row['value1'];
$value2 = $row['value2'];

$data =  json_encode(
  array("value1" => $value1, 
  "value2" => $value2)).",";

echo $data;
}
echo "]";

但结果以“,]”结尾,如下所示:

[{"value1":"847534837","value2":"Regular"},{"value1":"847534838","value2":"Regular"},]

我需要一些帮助。

json_encode() 为您完成工作,不要尝试使用自己的编码器!!!

要获得您想要的 json 字符串输出,只需将当前正在编码的项目一次一个地粘贴到另一个数组中,然后对 who enchilada 进行一次编码。

  $final_array = []; notation
  while($row = mysql_fetch_array($result)){
       $final_array[] = ["value1" => $row['value1'], 
                         "value2" => $row['value2']];
  }

 echo json_encode($final_array);

NOTE: I'm assuming you're using PHP >= 5.4 and have the [] notation, otherwise replace [] and ["value1" => $row['value1'], "value2" => $row['value2']] with array() and array("value1" => $row['value1'], "value2" => $row['value2']) respectively.

首先,不要使用 mysql_* 函数。使用 PDO。

其次,有两种处理方式:

对于少量数据:

$result = $pdo->query('SELECT column1 as key1, ... FROM ...');
echo json_encode($result->fetchAll(PDO::FETCH_ASSOC));

这种方法会一次将数据保存在内存中四次:MySQL 的结果缓冲区、PDO 的结果集、序列化的 JSON 字符串和输出缓冲区。对于少量数据(最多 1 MB),它很好,而且是最快的方法。

对于大量数据,您可以在小常量内存中执行此操作space。不过要复杂得多。

首先,您需要去掉 fetchAll() 调用。但是因为PHP里面没有streamingJSON编码器,需要自己写,这个你试过了。那么下一步就是在MySQL服务器中使用无缓冲查询,所以数据库服务器中的结果集不是pre-generated。毕竟,您可以将整个数据库转储到 JSON 数组中,而不必担心内存问题。但我想你应该坚持上面的两行。

流媒体 JSON 作者:

假设您需要数组并且有可迭代对象,并且集合中的单个对象很小,但数量很多。那么你需要这样做:

function write_json_array($array) {
  echo "[\n";
  $first = true;
  foreach ($array as $v) {
    if ($first) {
      $first = false;
    } else {
      echo ",\n";
    }
    echo json_encode($v);
  }
  echo "]";
}

那么你可以这样使用它:

$result = $pdo->query('SELECT column1 as key1, ... FROM ...');
$result->setFetchMode(PDO::FETCH_ASSOC);
write_json_array($result); // PDOStatement will do the trick.