PHP JSON用逗号和括号编码

时间:2017-01-12 19:21:04

标签: php mysql json encode

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

<?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 "]";

但结果完成了&#34;,]&#34;像这样:

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

我想要一些帮助。

2 个答案:

答案 0 :(得分:1)

json_encode()为您完成工作,不要试图推出自己的编码器!

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

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

 echo json_encode($final_array);
  

注意:我假设您使用的是PHP&gt; = 5.4并且使用[]表示法,   否则更换      []["value1" => $row['value1'], "value2" => $row['value2']]分别有array()array("value1" => $row['value1'], "value2" => $row['value2'])

答案 1 :(得分:0)

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

其次,有两种方法可以解决这个问题:

对于少量数据:

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

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

对于大量数据,您可以在小的常量内存空间中执行此操作。但它要复杂得多。

首先,您需要摆脱fetchAll()电话。但是因为PHP中没有流式JSON编码器,所以你需要自己编写,你尝试过。然后下一步是在MySQL服务器中使用无缓冲查询,因此结果集不会在数据库服务器中预先生成。毕竟,您可以将整个数据库转储到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.