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的