JSON对象中的Javascript数组

时间:2012-01-25 10:59:58

标签: javascript jquery json object

我正在尝试实现此结构(内部有数组的JSON对象):

var data = {
     page : 'hello',
     rows: [
          {
              column: 'two'
          }
     ] 
}

但是我失败了,尝试了各种方法,这是我正在进行的工作代码:

var data = new Array();
    data['settings'] = [];
    var i = 0;
    var inputName, value;
    for (i; i < inputs.length; i++){
        inputName = $(inputs[i]).attr('name');
        value = $(inputs[i]).val();
        data['settings'][inputName] = value;
    }
    data['page_id'] = page_id;

所以我知道变量名称与所需的示例不同,但是你得到了一般的要点!目前,它只是使数据成为一个空数组。但我需要将它作为一个JSON对象,并将其发送到服务器。

3 个答案:

答案 0 :(得分:3)

你所引用的是一个 JavaScript 对象,其中包含一个JavaScript数组,看不到JSON *。

要创建它,我认为你根本不想要一个数组,只是一个带有嵌套对象的对象:

var data = {
    settings: {},
    page_id:  page_id
};
var i, input;
for (i = 0; i < inputs.length; i++){
    input = $(inputs[i]);
    data.settings[input.attr('name')] = input.val();
}

这是有效的,因为JavaScript对象是名称/值对的 maps 。您可以使用点分表示法和文字属性名称来引用对象的属性:

x = obj.foo;

...或使用括号内的表示法和字符串名称:

x = obj["foo"];

在后一种情况下,您可以使用您喜欢的任何表达式作为字符串,例如:

x = obj["f" + "o" + "o"];

JavaScript还有文字对象初始值设定项,您可以使用它来创建一个已包含属性的对象:

obj = {foo: "bar"};

创建一个带有foo属性且值为"bar"的对象,并将该对象分配给obj变量。

再看看上面的代码块:

  1. 我们使用属性settingspage_id创建一个对象。 settings初始化为空白对象; page_id初始化为page_id变量的值。

  2. 然后我们遍历您的inputs并使用每个输入的名称将属性添加到settings,将属性的值设置为输入的值。

  3. 所以我们假设我们有

    <input name="oneField" value="bar">
    <input name="anotherField" value="bang">
    <input name="yetAnotherField" value="cool">
    

    ...我们假设page_id3

    我们将在data变量引用的对象中结束此结构:

    {
        settings: {
            oneField: "bar",
            anotherField: "bang",
            yetAnotherField: "cool"
        },
        page_id:  page_id
    }
    

    * JSON文字符号。当您在代码中编写var data = { ... };之类的内容时,您只是使用JavaScript。 JSON是JavaScript文字语法的一个子集,旨在易于解析,因此,例如,它可以方便地将任意复杂数据存储在数据存储中,或者用于从服务器检索数据。您检索包含数据的字符串,然后解析该字符串以在内存中构建对象结构。

答案 1 :(得分:0)

var data = {};
data['settings'] = {};
var i = 0;
var inputName, value;
for (i; i < inputs.length; i++){
    inputName = $(inputs[i]).attr('name');
    value = $(inputs[i]).val();
    data['settings'][inputName] = value;
}
data['page_id'] = page_id;

这会给你如下结果:

{
     page_id: 12345,
     setting: { foo: 'one', bar: 'two'}
}

答案 2 :(得分:0)

[]new Array()都用于初始化数组;你所追求的(当你试图将键映射到值时)是对象;使用{}new Object()进行初始化。

var data = {};
    data['settings'] = {};
    var i = 0;
    var inputName, value;
    for (i; i < inputs.length; i++){
        inputName = $(inputs[i]).attr('name');
        value = $(inputs[i]).val();
        data['settings'][inputName] = value;
    }
    data['page_id'] = page_id;

为了帮助您使用语法,只有当您查找的成员是变量,或者密钥包含保留字或特殊字符(空格等)时,才需要使用方括号表示法。否则,您可以使用点表示法;

var data = {};
    data.settings = {};
    var i = 0;
    var inputName, value;
    for (i; i < inputs.length; i++){
        inputName = $(inputs[i]).attr('name');
        value = $(inputs[i]).val();
        data.settings[inputName] = value;
    }
    data.page_id = page_id;

使用对象文字语法({})构造对象时,您也可以在对象上定义成员。在for循环中而不是在for循环中声明循环变量也更常见。

var data = {
        settings: {}
    };
    var inputName, value;
    for (var i=0; i < inputs.length; i++){
        inputName = $(inputs[i]).attr('name');
        value = $(inputs[i]).val();
        data.settings[inputName] = value;
    }
    data.page_id = page_id;