Perl анализирует JSON-ответ как массив

0

У меня длинный sql-запрос с большим количеством производных столбцов, и я пытаюсь его отобразить на угловой странице. Я достиг точки, в которой я получаю ответ json из db, но возвращающ каждую строку как один большой объект вместо массива. Я использую perl для запроса db, и я пробовал кучу способов разобрать его, и я еще не получил его.

Подпрограмма:

require fileWithAllImports.pl #has CGI, JSON, etc
%response                 = {};
$response{error}{code}    = "0";
$response{error}{message} = "OK";

$sql = "select c.title as Content....";
$sql  = &database_escape_sql($sql); #I think its self-explanatory what this does
%hash = &database_select_as_hash_with_auto_key(
$sql,"content ... "); #more columns

foreach $i ( keys %hash ) {

        $id                              = $i;
        $response{$i}{content}           = $hash{$i}{content};
       ...
    } #again all of the columns

print_json_response(%response);

Угловой вызов:

$http.get("/folder/ofSubroutine.cgi")
        .then(function(minutes_results) {
            console.log(minutes_results);

и ответ json:

{"6":{"derivedcolumn":"123","anotherderived":"987",..},"11":{"derived column":"123"}...}

Я верю, что ng-repeat работает только с массивом, так как я могу разобрать ответ с сервера на массив?

  • 0
    Глядя назад, отправка массива объектов с сервера является нормой.
  • 0
    Я не совсем понимаю? У большинства запросов на других страницах нет проблем с возвратом массива. Хотя я не знаю, имеют ли они дело с производными столбцами
Показать ещё 2 комментария
Теги:

1 ответ

0
Лучший ответ

На задней панели вы можете поместить данные в отдельный массив вместо добавления каждой строки в хэш:

foreach $i ( keys %hash ) {
    push @{$response{data}}, { id => $i,
                               content => $hash{$i}{content},
                               ... ,
                             };
}
print_json_response( %response );

Или на лицевой стороне преобразуйте свой ассоциативный массив в обычный массив:

$http.get("/folder/ofSubroutine.cgi")
    .then(function(minutes_results) {
        console.log(minutes_results);
        var minutes_results_as_array = [];
        for (var key in minutes_results) {
            if (key != "error") {
                minutes_results[key].id = key;
                minutes_results_as_array.push(minutes_results[key]);
            }
        }
        // display minutes_results_as_array as you see fit
      } );
  • 0
    Сделал это на бэкэнде и все заработало. Спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню