问题使用json.js对多维数组进行字符串化

时间:2011-03-02 13:53:47

标签: javascript jquery json

我遇到.stringify()的问题,但我认为我的JavaScript数组一定是错的,这是我的代码:

var questions = new Array();

$('#Valid').hover(function(){
    for (i=0;i < $('.Questions').length;i++){
        questions[i]=new Array();
        questions[i]['numero']=$('.Numero:eq('+i+')').html();
        questions[i]['question']=$('.ItemInput:eq('+i+')').val();
        questions[i]['variable']=$('.VarName:eq('+i+')').val();
    }

    var stringJSON=JSON.stringify(questions)
    alert (stringJSON)
})

stringJSON var返回:

[[]]

我做错了什么?

3 个答案:

答案 0 :(得分:18)

数组有整数键,而不是字符串。

改为使用对象; JS中的对象看起来像关联数组:

var questions = new Array();
$('#Valid').hover(function(){
    for (var i=0;i < $('.Questions').length;i++){
        questions[i]={};
        questions[i]['numero']=$('.Numero:eq('+i+')').html();
        questions[i]['question']=$('.ItemInput:eq('+i+')').val();
        questions[i]['variable']=$('.VarName:eq('+i+')').val();
    }

    var stringJSON=JSON.stringify(questions);
    alert(stringJSON);
});

questions[i]设为{}是关键。

您可以缩短此语法:

var questions = new Array();
$('#Valid').hover(function(){
    for (var i=0;i < $('.Questions').length;i++){
        questions[i] = {
            numero:   $('.Numero:eq('+i+')').html(),
            question: $('.ItemInput:eq('+i+')').val(),
            variable: $('.VarName:eq('+i+')').val()
        };
    }

    var stringJSON=JSON.stringify(questions);
    alert(stringJSON);
});

答案 1 :(得分:6)

修正:

questions[i]=new Array();替换为questions[i] = {};(或= new Object();,如果您真的需要这种“丑陋”的语法)。

说明:

JavaScript中的数组就像C语言中的数组一样:它们只支持[0, array.length)区间内的整数索引。

对于关联数组,可以使用使用对象文字{}创建的对象。

答案 2 :(得分:1)

首先,您的“问题”变量似乎是用作真正的数组。然而,你在里面数组中的不是真实数组 - 它们只是具有属性的对象。

var questions = [];

$('#Valid').hover(function(){
    for (var i=0;i < $('.Questions').length;i++){
        questions[i] = {
          'numero': $('.Numero:eq('+i+')').html(),
          'question': $('.ItemInput:eq('+i+')').val(),
          'variable': $('.VarName:eq('+i+')').val()
        };
    }

    var stringJSON=JSON.stringify(questions)
    alert (stringJSON)
});

(请注意,我还为“i”循环变量添加了var - 非常重要!)

现在,至于为什么这件事情空洞,好吧,我怀疑是因为$('.Questions')空洞。

哦,而且,这是你可以使用jQuery“。map()”API for:

 $('#Valid').hover(function() {
   questions = $('.Questions').map(function(i, q) {
     return {
       'numero': $('.Numero:eq('+i+')').html(),
       'question': $('.ItemInput:eq('+i+')').val(),
       'variable': $('.VarName:eq('+i+')').val()
     };
   }).get();

   var stringJSON = JSON.stringify(questions);
   alert(stringJSON);
});

这有点好,因为它解决了在循环的每次迭代中重新评估$('.Questions')的丑陋问题。