dynamic添加新属性到Node中现有的JSON数组

我需要添加一个当前JSON中不存在的属性。 json对象如下所示。

var jsonObj = { "result" : "OK", "data" : [] }; 

我想在“数据”中join温度。 我可以像下面这样做。

 jsonObj.data.push( {temperature : {}} ); 

然后,我想在“温度”内添加“家”,“工作”。 结果如下所示。

 { "result" : "OK", "data" : [ { "temperature" : { "home" : 24, "work" : 20 } } ] }; 

我怎么能这样做? 我成功地在“数据”中插入“温度”,但不能在温度内添加“家”和“工作”。 “温度”内部可能会有更多,所以需要用{}包围。

这个怎么样?

 var temperature = { temperature: { home: 24, work: 20 }}; jsonObj.data.push(temperature); 

我不知道在两个步骤中做这个问题对于你的问题是如何构造是很重要的,但是你可以稍后通过索引到数组中添加home和work属性,如下所示:

 jsonObj.data.push({ temperature: { }}); jsonObj.data[0].temperature.home = 24; jsonObj.data[0].temperature.work = 20; 

但是,这不是一个好主意,因为它依赖于数组索引来查找温度对象。 如果这是一个要求,最好是通过循环遍历data数组来最终find您感兴趣的对象。

编辑:

循环定位温度对象的例子就像这样:

 for (var i = 0; i < jsonObj.data.length; i++) { if (jsonObj.data[i].temperature) { break; } } jsonObj.data[i].temperature.home = 24; jsonObj.data[i].temperature.work = 20; 

编辑:

如果您感兴趣的特定属性在开发时未知,则可以使用括号语法来改变:

 for (var i = 0; i < jsonObj.data.length; i++) { if (jsonObj.data[i]['temperature']) { break; } } jsonObj.data[i]['temperature'].home = 24; jsonObj.data[i]['temperature'].work = 20; 

这意味着你可以在那里使用一个variables而不是硬编码:

 var target = 'temperature'; for (var i = 0; i < jsonObj.data.length; i++) { if (jsonObj.data[i][target]) { break; } } jsonObj.data[i][target].home = 24; jsonObj.data[i][target].work = 20; 

怎么样

 jsonObj.data.push( { temperature : { "home" : 24, "work" : 20 } } );