我正在尝试实现此结构(内部有数组的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对象,并将其发送到服务器。
答案 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
变量。
再看看上面的代码块:
我们使用属性settings
和page_id
创建一个对象。 settings
初始化为空白对象; page_id
初始化为page_id
变量的值。
然后我们遍历您的inputs
并使用每个输入的名称将属性添加到settings
,将属性的值设置为输入的值。
所以我们假设我们有
<input name="oneField" value="bar">
<input name="anotherField" value="bang">
<input name="yetAnotherField" value="cool">
...我们假设page_id
是3
。
我们将在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;