Php 编码一个完美的json
我有这个密码Php 编码一个完美的json,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我有这个密码 $md_query = "SELECT * FROM table ORDER BY id ASC"; $md_result = mysql_query($md_query, $con); header('Cache-Control: no-cache, must-revalidate'); header('Content-type: application/json'); while($md_row=mysql_fetch_array($md_result)) $dat
$md_query = "SELECT * FROM table ORDER BY id ASC";
$md_result = mysql_query($md_query, $con);
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/json');
while($md_row=mysql_fetch_array($md_result))
$data_row = array(
'id' => $md_row['id'],
'type' => $md_row['type'],
'title' => $md_row['title'],
'content' => $md_row['content'],
'author' => $md_row['postedby'],
'post_date' => $md_row['posteddate'],
'publish' => $md_row['publish']
);
print json_encode($data_row); `
但我只展示了一张唱片。。。有人知道如何修复此问题吗?您的while循环不包括print语句。。。因此,它循环遍历所有记录,每次完全重置
$data\u row
,然后在完成后打印一次
要包含多个语句,您需要使用
{
和}
来封装块。您的while循环不包含print语句。。。因此,它循环遍历所有记录,每次完全重置$data\u row
,然后在完成后打印一次
要包含多个语句,您需要使用
{
和}
来封装块。您正在循环数据,并将$data\u row
设置为每行的新数组,但是,在退出循环之前,您不会对它做任何操作。您正在对数据进行循环,并将$data\u row
设置为每一行的新数组,但在退出循环之前,您不会对它做任何操作。您需要封装行记录,如{row1:{a:b,b:c},row2:{e:f,g:h}
$json = '{';
while($md_row=mysql_fetch_array($md_result)) {
$data_row = array(
'id' => $md_row['id'],
'type' => $md_row['type'],
'title' => $md_row['title'],
'content' => $md_row['content'],
'author' => $md_row['postedby'],
'post_date' => $md_row['posteddate'],
'publish' => $md_row['publish']
);
$json .= '"' . $id . '" :' . json_encode($data_row) . ',';
// $id just as an example for the string-value pair
}
$json = substr($json, 0, -1); // remove comma after last row
$json .= '}';
echo $json;
...
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/json');
$md_query = $db->prepare(
"SELECT id, type, title, content, postedby AS author,
posteddate AS post_date, publish
FROM posts
ORDER BY id ASC");
try {
$md_query->execute();
echo json_encode($md_query->fetchAll(PDO::FETCH_ASSOC));
} catch (PDOException $exc) {
...
}
有关更多示例,请参见:
您需要封装行记录,如{row1:{a:b,b:c},row2:{e:f,g:h}
$json = '{';
while($md_row=mysql_fetch_array($md_result)) {
$data_row = array(
'id' => $md_row['id'],
'type' => $md_row['type'],
'title' => $md_row['title'],
'content' => $md_row['content'],
'author' => $md_row['postedby'],
'post_date' => $md_row['posteddate'],
'publish' => $md_row['publish']
);
$json .= '"' . $id . '" :' . json_encode($data_row) . ',';
// $id just as an example for the string-value pair
}
$json = substr($json, 0, -1); // remove comma after last row
$json .= '}';
echo $json;
有关更多示例,请参见:
代码示例仅在循环完成后打印
$data\u row
,此时$data\u row
保存结果的最后一行。您需要将行收集到数据结构中,对其进行JSON编码并打印,或者在循环的每次迭代中打印每一行
...
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/json');
$md_query = $db->prepare(
"SELECT id, type, title, content, postedby AS author,
posteddate AS post_date, publish
FROM posts
ORDER BY id ASC");
try {
$md_query->execute();
echo json_encode($md_query->fetchAll(PDO::FETCH_ASSOC));
} catch (PDOException $exc) {
...
}
请注意,由于这会从表中获取所有行,因此可能会耗尽脚本允许的最大内存或运行时间。如果内存限制有问题,请更改负责显示结果的代码行,以便一次打印一个块的结果。例如:
...
$md_query->setFetchMode(PDO::FETCH_ASSOC);
echo '[';
$last = $md_query->rowCount()-1;
foreach ($md_query as $i => $post) {
echo json_encode($post);
if ($i < $last) {
echo ", ";
}
}
echo ']';
} catch (PDOException $exc) {
...
。。。
$md_query->setFetchMode(PDO::FETCH_ASSOC);
回声“[”;
$last=$md_query->rowCount()-1;
foreach($md\u查询为$i=>$post){
echo json_编码($post);
如果($i<$last){
回声“,”;
}
}
回声']';
}捕获(PDO异常$exc){
...
代码示例仅在循环完成后打印$data\u row
,此时$data\u row
保存结果中的最后一行。您需要将行收集到数据结构中,JSON编码并打印它,或者在循环的每次迭代中打印每一行
...
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/json');
$md_query = $db->prepare(
"SELECT id, type, title, content, postedby AS author,
posteddate AS post_date, publish
FROM posts
ORDER BY id ASC");
try {
$md_query->execute();
echo json_encode($md_query->fetchAll(PDO::FETCH_ASSOC));
} catch (PDOException $exc) {
...
}
请注意,由于这将从表中获取所有行,可能会耗尽脚本允许的最大内存或运行时间。如果内存限制有问题,请更改负责显示结果的代码行,以便一次打印一个块的结果。例如:
...
$md_query->setFetchMode(PDO::FETCH_ASSOC);
echo '[';
$last = $md_query->rowCount()-1;
foreach ($md_query as $i => $post) {
echo json_encode($post);
if ($i < $last) {
echo ", ";
}
}
echo ']';
} catch (PDOException $exc) {
...
。。。
$md_query->setFetchMode(PDO::FETCH_ASSOC);
回声“[”;
$last=$md_query->rowCount()-1;
foreach($md\u查询为$i=>$post){
echo json_编码($post);
如果($i<$last){
回声“,”;
}
}
回声']';
}捕获(PDO异常$exc){
...
为什么要把显示所有行或用{}换行变得如此复杂呢?只需将$data\u row
做成一个多维数组,json\u encode()就可以用[]为您实现:
while($md_row=mysql_fetch_array($md_result))
$data_row[] = array( // please note I added [] !
'id' => $md_row['id']
,'type' => $md_row['type']
);
print json_encode($data_row);
印刷品,例如:
[{"id":"3","type":"One"},{"id":"8","type":"Two"},{"id":"9","type":"Three"},{"id":"10","type":"Four"}]
如果将该JSON字符串转换回数组,则如下所示:
Array(
[0] => Array
(
[id] => 3
[type] => One
)
[1] => Array
(
[id] => 8
[type] => Two
)
[2] => Array
(
[id] => 9
[type] => Three
)
[3] => Array
(
[id] => 10
[type] => Four
))
为什么要使显示所有行或用{}换行变得如此复杂呢?只需将
$data\u row
设置为多维数组,json\u encode()就可以用[]为您实现:
while($md_row=mysql_fetch_array($md_result))
$data_row[] = array( // please note I added [] !
'id' => $md_row['id']
,'type' => $md_row['type']
);
print json_encode($data_row);
印刷品,例如:
[{"id":"3","type":"One"},{"id":"8","type":"Two"},{"id":"9","type":"Three"},{"id":"10","type":"Four"}]
如果将该JSON字符串转换回数组,则如下所示:
Array(
[0] => Array
(
[id] => 3
[type] => One
)
[1] => Array
(
[id] => 8
[type] => Two
)
[2] => Array
(
[id] => 9
[type] => Three
)
[3] => Array
(
[id] => 10
[type] => Four
))
只需在每个过程中添加一个逗号。但是,您需要确保不会在最后一条记录中添加逗号;在某些浏览器中,后面的逗号会导致问题。!是的,我是指每个数组
{id:“1”,“name:“me”},{id:“2”,“name:“you”}
我没有挖掘逗号显示。{},{}
只需在每个过程中添加一个逗号。但是,您需要确保不会在最后一条记录中添加逗号;在某些浏览器中,尾随的逗号会导致问题。!是的,我指的是每个数组{“id”:“1”,“name”:“me”},{“id”:“2”,“name”:“you”}
我在{},{
@HannibalBurr-在第一次通过循环后,只需在打印下一个数组之前打印一个逗号。您可以在循环前设置一个标志来指示第一次通过,并在每次打印后清除它。@HannibalBurr-在第一次通过循环后,只需在打印下一个数组之前打印一个逗号。您可以在重新启动循环以指示第一次通过,并在每次打印后清除它。mysql扩展已过时,正在被弃用。新代码应使用mysqli或PDO,两者都有重要的优点,例如支持预处理语句。不要使用;只选择需要的列。在每个itera中重置$data_行您所需要做的就是将所有行存储到一个数组中并json\u encode($final\u array)
mysql扩展已经过时,即将被弃用。新代码应该使用mysqli或PDO,这两种代码都有重要的优点,例如支持准备好的语句。不要使用;只选择需要的列。在每次迭代中都要重置$data_行。只需将所有行存储到数组和json即可_encode($final_array)
对象数组应该封装在[]中。当@user1083183回答时,最终输出应该是[{id:1,title:'title'},{id:2,title:'title2'}]
OP既没有要求对象数组,也没有看到user1083183的答案…错误的主题?对象数组应该封装在[]中当@user1083183回答时,最终输出应该是[{id:1,title:'title'},{id:2,title:'title2'}]
OP既没有请求对象数组,也没有看到user1083183的