2012-04-24 41 views
1

返回NULL當試圖通過cmd提示我json字符串返回[]我已閱讀其他職位運行我的perl腳本,並固定我的數據庫是utf8和錯誤仍然存​​在。我已經嘗試了兩種didfferent方式來編碼我的Perl字符串的第一個是$json = encode_json @temp_array返回該錯誤hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this然而,當我使用這條線$json_text = $json->encode(@temp_array)我只是得到[]JSON在Perl

這裏是我的Perl:

my $json_text; 
my $json = JSON->new->utf8; 
my @temp_array =[]; 
my $temp_array; 
while (@data = $query_handle->fetchrow_array()) 
    { 
    my %json_hash =(); 
    my $hash_ref; 
    %json_hash = (
       "User ID" => $data[0], 
       "Status" => $data[1], 
       "Last Password Reset" => $data[2], 
       "Reset Needed" => $data[3] 
       ); 
    $hash_ref = \%json_hash; 
    push (@temp_array, $hash_ref); 
    } 

print $json = encode_json @temp_array . "\n"; #encode with error 
print $json_text = $json->encode(@temp_array) . "\n"; #encode with [] 
print $cgi->header(-type => "application/json", -charset => "utf-8"); 
print $json_text; #Prints [] 

所以在我自己的測試,通過cmd prompt我知道,雖然正確檢索我的數據庫中的數據,並正在建立一個哈希,我認爲是正確的。

這是事實我推我的哈希引用數組而不是哈希本身?一旦我得到正確的這個字符串,我會通過jquery

將它稱爲html。謝謝。

回答

6

JSON預計引用:

print $json = encode_json(\@temp_array) . "\n"; 
print $json_text = $json->encode(\@temp_array) . "\n"; 

編輯:除非你能allow_nonref

另一個編輯:此行是wrong--

my @temp_array =[]; ## should be my @temp_array =(); 

和這條線覆蓋$ JSON變量:

print $json = encode_json @temp_array . "\n"; ## the next line in your script shouldn't work 

最後編輯 - 未經測試:

my $json = JSON->new->utf8; 
my @temp_array; 
while (my @data = $query_handle->fetchrow_array()) { 
    my %json_hash = (
      "User ID" => $data[0], 
      "Status" => $data[1], 
      "Last Password Reset" => $data[2], 
      "Reset Needed" => $data[3] 
    ); 
    push (@temp_array, \%json_hash); 
} 

print $json->encode(\@temp_array) . "\n"; 
+0

謝謝。沒有發現您的「未經測試」代碼示例的問題: 'print encode_json \ @temp_array。 「\ n」;'仍然給我錯誤 1print $ json-> encode(\ @ temp_array)。 「\ n」;'輸出完全是我期待的!謝謝!!!! – cquadrini 2012-04-24 17:47:19

+1

謝謝。我刪除了該行。我懷疑我應該在該行上添加'()'。 – gpojd 2012-04-24 17:51:51