2011-05-17 74 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