json_encode不会打印数组名称

时间:2011-09-23 12:08:05

标签: php datatables json

我对json_encode没有经验,我正在尝试为DataTables with server-side processing返回一个名为 aaData 的数组阵列。

输出应该是:

{
    "sEcho": 3,
    "iTotalRecords": 57,
    "iTotalDisplayRecords": 57,
    "aaData": [
        [
            "Gecko",
            "Firefox 1.0",
            "Win 98+ / OSX.2+",
            "1.7",
            "A"
        ],
        [
            "Gecko",
            "Firefox 1.5",
            "Win 98+ / OSX.2+",
            "1.8",
            "A"
        ],
        ...
    ] 
}

但是我的PostgreSQL 8.4驱动的PHP脚本的实际输出

if (isset($_REQUEST['json'])) {
    $aaData = array();
    while ($row = $sth->fetch(PDO::FETCH_NUM)) {
        array_push($aaData, $row);
    }
    print json_encode($aaData);
}

实际上是缺少括号外的对象(对象如?)和 aaData 名称:

[
    [ .... ],
    [ .... ],
    [ .... ]
]

你最好怎么做?

3 个答案:

答案 0 :(得分:11)

另一个选择是使用问题中的代码但改变一行:

print json_encode(array('aaData' => $aaData));

答案 1 :(得分:5)

如果你希望它有aaData作为名称,那么你需要给你的数组一个关联索引,如下所示:

if (isset($_REQUEST['json'])) { 
    $arr['aaData'] = array(); 
    while ($row = $sth->fetch(PDO::FETCH_NUM)) { 
        array_push($arr['aaData'], $row); 
    } 
    print json_encode($arr); 
}

答案 2 :(得分:1)

解释问题的根源:变量名$aaData与数据本身无关。因此,json_encode不会将其序列化。