将新属性动态添加到Node中的现有JSON数组

时间:2014-04-22 01:10:51

标签: javascript json node.js attributes

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

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

我想在'数据'中添加温度。我可以像下面这样做。

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

然后,我想在'温度'内添加'home','work'。结果如下所示。

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

我怎么能这样做?我成功地在'数据'中插入'温度',但无法添加'home'和amp;在温度范围内“工作”。 '温度'内可能有更多,所以需要用{}括起来。

2 个答案:

答案 0 :(得分:13)

这个怎么样?

var temperature = { temperature: { home: 24, work: 20 }};

jsonObj.data.push(temperature);

我无法分辨两个步骤中的问题是否对您的问题的结构非常重要,但是可以稍后通过索引到数组中来添加主页和工作属性,就像这样:

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

jsonObj.data[0].temperature.home = 24;
jsonObj.data[0].temperature.work = 20;

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

编辑:

循环查找温度对象的示例将如下所示:

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;    

这意味着您可以在那里使用变量而不是硬编码:

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;

答案 1 :(得分:0)

怎么样

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