将variables名称值对dynamic添加到JSON对象

我有一个JSON对象充满ips像

var ips = {} 

然后我像这样将ip对象添加到这个对象

 ips[ipID] = {} 

然后我需要添加dynamic/variables名称值对每个IP,所以我使用这样的代码

 var name; var value; var temp = {}; tmp[name] = value 

我的问题是,如何将这些名称值对/ tmp添加到我的ipID对象,以便我的结果是这样的

 ipID = { name : value, anotherName : anotherValue } 

这不是JSON。 这只是Javascript对象,与JSON完全没有关系。

您可以使用括号来dynamic设置属性。 例:

 var obj = {}; obj['name'] = value; obj['anotherName'] = anotherValue; 

这与使用像这样的对象字面值创build对象完全一样:

 var obj = { name : value, anotherName : anotherValue }; 

如果已经将对象添加到ips集合中,则使用一对括号访问集合中的对象,并使用另一对来访问对象中的对象:

 ips[ipId] = {}; ips[ipId]['name'] = value; ips[ipId]['anotherName'] = anotherValue; 

注意与上面代码的相似性,但是您只是使用ips[ipId]而不是obj

您还可以从集合中获取对象的引用,并使用该对象访问保留在集合中的对象:

 ips[ipId] = {}; var obj = ips[ipId]; obj['name'] = value; obj['anotherName'] = anotherValue; 

您可以使用stringvariables来指定属性的名称:

 var name = 'name'; obj[name] = value; name = 'anotherName'; obj[name] = anotherValue; 

它是标识该属性的variables(string)的值,所以当您在上面的代码中使用obj[name]作为这两个属性时,它是variables中的string,在您访问它时决定要访问的属性。

使用ECMAScript 6有一个更好的方法。

您可以在对象属性定义中使用计算的属性名称 ,例如:

 var name = 'John'; var value = '42'; var name2 = 'Sarah'; var value2 = '35'; var ipID = { [name] : value, [name2] : value2 } 

根据需要,这与用于属性名称的variables等效。

 var ipID = { John: "42", Sarah: "35" } 

我假设“ips”中的每个条目都可以有多个名称值对 – 所以它是嵌套的。 你可以这样实现这个数据结构:

 var ips = {} function addIpId(ipID, name, value) { if (!ips[ipID]) ip[ipID] = {}; var entries = ip[ipID]; // you could add a check to ensure the name-value par's not already defined here var entries[name] = value; } 

当使用JavaScript对象时,也可以使用“点符号”来添加一个项目,( JSLint喜欢 )

 var myArray = { name : "john" }; //will initiate a key-value array with one item "name" and the value "john" myArray.lastName = "smith"; //will add a key named lastName with the value "smith" //Object {name: "john", lastName: "smith"} 

以下是Chrome控制台中的testing截图

截图

根据其他答案提出的build议,我相信这可能会有所帮助:

 var object = ips[ipId]; var name = "Joe"; var anothername = "Fred"; var value = "Thingy"; var anothervalue = "Fingy"; object[name] = value; object[anothername] = anothervalue; 

然而,这并没有被testing,只是基于不断重复的假设:

 object["string"] = value; //object = {string: value} 

在Javascript中。

  var myObject = { "name" : "john" }; // { "name" : "john" }; myObject.gender = "male"; // { "name" : "john", "gender":"male"};