【问题标题】:How to decode a JSON string?如何解码 JSON 字符串?
【发布时间】:2011-08-27 04:29:47
【问题描述】:

在服务器端,我是否有 2 个哈希编码成 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

【问题讨论】:

  • 您应该为在上一个问题中编写该 jQuery 代码的人留下评论。没有打开一个新问题,它只会导致严重的碎片化。
  • @Gary Green :我想过这个问题,但他完美地解决了这个问题,所以我认为这会离题?

标签: javascript jquery perl json


【解决方案1】:

你可以使用 for in 语句

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

【讨论】:

    【解决方案2】:

    你不需要把它变成一个数组。根据jQuery.each() documentation,它需要数组或对象,而 JSON 是 JavaScript 的对象文字符号的子集。

    编辑:这是一个例子:http://jsfiddle.net/pedrocorreia/s5UrZ/2/

    【讨论】:

    • 为什么会这样? var res = makeTable(my); \n document.write(res); 是做什么的?
    • 它声明一个变量并分配您的 makeTable 函数的返回值,然后将其写入 html 文档。提供给函数的变量“my”包含您描述的 json 对象。
    【解决方案3】:

    您可以使用 douglas crockford 创建的 JSON 解析器:
    https://github.com/douglascrockford/JSON-js

    在您的页面中包含json2.js,您可以这样做:

    var object = JSON.parse(string);
    

    那么你就可以把它当成一个数组来使用了。

    【讨论】:

    • 你也可以使用内置的 JSON 解析器:$.parseJSON(data)
    【解决方案4】:

    您应该使用 http://api.jquery.com/jQuery.getJSON/ 中提到的 jQuery.getJSON()。

    如果你想这样做,还有 $.parseJSON() 方法可以将字符串解析为 json。

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2011-01-15
      • 2019-04-03
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多