2015-09-08 109 views
0

我有一個很長的SQL查詢與很多派生列,我試圖讓它顯示在一個角度頁面。我達到了從數據庫獲得json響應的地步,但是它將每行都作爲一個大對象而不是數組返回。我使用Perl來查詢數據庫,我試過一堆方法來解析它,我還沒有得到它。Perl解析JSON響應作爲數組

子程序:

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 repsonse:

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

相信ng-repeat只有一個陣列工作所以我將如何解析從服務器到數組的響應?

+0

看着這個倒退,從服務器發送對象數組是 – charlietfl

+0

我很困惑?大多數其他頁面上的查詢似乎沒有返回數組的問題。雖然我不知道他們是否處理衍生列 –

+0

你的問題顯然是'database_select_as_hash_with_auto_key'。你正在請求一個散列,對這些數據進行一些處理,然後返回一個散列。這怎麼可能產生一個數組?向我們展示我提到的子例程的代碼,也許我們可以建議您需要做出的更改。 –

回答

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

它在後端,它的工作。謝謝 :) –