json_encode не печатает имя массива - PullRequest
1 голос
/ 23 сентября 2011

У меня нет опыта с json_encode , и я пытаюсь вернуть массив массива, который должен называться aaData - для DataTables с обработкой на стороне сервера .

Вывод должен быть таким:

{
    "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"
        ],
        ...
    ] 
}

но фактический вывод моего PHP-скрипта на основе PostgreSQL 8.4

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

фактически отсутствует в скобках (объект вроде?) И имя aaData :

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

Как бы вы сделали это лучше всего?

Ответы [ 3 ]

11 голосов
/ 23 сентября 2011

Другой вариант - использовать код в вопросе, но изменить одну строку:

print json_encode(array('aaData' => $aaData));
5 голосов
/ 23 сентября 2011

Если вы хотите, чтобы в качестве имени было указано aaData, вам нужно присвоить массиву ассоциативный индекс, например:

if (isset($_REQUEST['json'])) { 
    $arr['aaData'] = array(); 
    while ($row = $sth->fetch(PDO::FETCH_NUM)) { 
        array_push($arr['aaData'], $row); 
    } 
    print json_encode($arr); 
}
1 голос
/ 23 сентября 2011

Чтобы объяснить корень вашей проблемы: имя переменной $aaData не имеет ничего общего с самими данными.Таким образом, json_encode не сериализует его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...