2015-09-08 147 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

它在后端,它的工作。谢谢 :) –