2011-05-17 73 views
2

在服務器端做我有2個散列我編碼成JSON字符串,像這樣如何解碼JSON字符串?

my $j = JSON->new; 
$j = $j->utf8; 

my $data; 
$data->{users} = $j->encode(\%user_result); 
$data->{owners} = $j->encode(\%owner_result); 
$json_string = to_json($data); 

print $cgi->header(-type => "application/json", -charset => "utf-8"); 
print $json_string; 

在客戶端我有

$(document).ready(function(){ 

    $('form').live('submit', function(){ 

    $.ajax({ 
     type: "GET", 
     url: "/cgi-bin/ajax_confirm.pl", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 

     data: $(this).serialize(), 

     error: function(XMLHttpRequest, textStatus, errorThrown) { 
     $('div#create_result').text("responseText: " + XMLHttpRequest.responseText + 
         ", textStatus: " + textStatus + 
         ", errorThrown: " + errorThrown); 
     $('div#create_result').addClass("error"); 
     }, 

     success: function(result){ 
     if (result.error) { 
      $('div#create_result').text("result.error: " + result.error); 
      $('div#create_result').addClass("error"); 
     } else { // perl script says everything is okay 

      var users = result.users; 
      var owners = result.owners; 
... 

users包含

{"ss":"Sandra Schlichting","fn":"Full name"} 

但不是一個數組。當我使用$.each()時,它需要一次性。

問題

我如何把它變成一個數組,這樣我就可以使用

function makeTable(users) { 
    var result = '<table>\n<tr><td>Initials</td><td>Full Name</td></tr>\n'; 
    $.each(users, function(index, value) { 
     result += '<tr><td>' + index + '</td><td>' + value + '</td></tr>\n'; 
    }); 
    result += '</table>'; 
    return (result); 
} 

應該產生

Initials Full Name 
ss Sandra Schlichting 
fn Full name 
+0

您應該在最後一個問題中爲寫這個jQuery代碼的人留下評論。不開一個新的問題,它只會導致不良的碎片。 – 2011-05-17 12:01:29

+0

可能的重複[如何在HTML中包含數組內容?](http://stackoverflow.com/questions/6028241/how-to-include-array-content-in-html) – 2011-05-17 12:01:53

+0

@Gary Green:我想過,但他解決了完美的問題,所以我認爲這將是無關緊要的? – 2011-05-17 12:13:57

回答

0

您可以在語句中使用了

var index = 0; 
for(user in users){ 
    result += '<tr><td>' + index + '</td><td>' + user['fn'] + '</td></tr>\n'; 
index++; 
} 
1

你不需要把它變成一個數組。根據jQuery.each() documentation它採用數組或對象,而JSON是JavaScript對象文字符號的子集。

編輯:下面是一個例子:http://jsfiddle.net/pedrocorreia/s5UrZ/2/

+0

這爲什麼有效?什麼'var res = makeTable(my); \ n document.write(res);'do? – 2011-05-17 12:24:36

+0

它聲明一個變量並賦值你的makeTable函數的返回值,然後把它寫入html文檔。提供給函數的變量'my'包含你描述的json對象。 – 2011-05-17 14:26:37

1

可以使用由Douglas Crockford的創建的JSON解析器:
https://github.com/douglascrockford/JSON-js

包括在您的網頁json2.js時,你可以這樣做:

var object = JSON.parse(string); 

然後你可以使用它作爲一個數組。

+3

您也可以使用內置的JSON解析器:'$ .parseJSON(data)' – Sylvain 2011-05-17 12:06:49