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.
我有一个 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']]
witharray()
andarray("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.