Как декодировать строку JSON? - PullRequest
2 голосов
/ 17 мая 2011

На стороне сервера у меня есть 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

Ответы [ 4 ]

3 голосов
/ 17 мая 2011

Вы должны использовать jQuery.getJSON (), как указано в http://api.jquery.com/jQuery.getJSON/.

Существует также метод $ .parseJSON () для анализа строки в json, если вы хотите пойти по этому пути.

1 голос
/ 17 мая 2011

Вам не нужно превращать его в массив.Согласно документации jQuery.each () он принимает как массивы, так и объекты, а JSON является подмножеством литеральной нотации объектов JavaScript.

Редактировать: Вот пример: http://jsfiddle.net/pedrocorreia/s5UrZ/2/

1 голос
/ 17 мая 2011

Вы можете использовать анализатор JSON, созданный Дугласом Крокфордом:
https://github.com/douglascrockford/JSON-js

включает json2.js на своей странице, вы можете сделать:

var object = JSON.parse(string);

Тогда вы можете использовать его как массив.

0 голосов
/ 17 мая 2011

вы можете использовать в заявлении

var index = 0;
for(user in users){
  result += '<tr><td>' + index + '</td><td>' + user['fn'] + '</td></tr>\n';
index++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...