如何保存深层嵌套对象中的更改?

时间:2017-09-27 19:17:18

标签: javascript json

我有下一个数据:

reservations = {
"2016":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 111"}},
"2017":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 222"}}
}

我需要更改一些notes_backend,然后将更新的reservations发送到API。

这是我的代码:

var reservations_obj = JSON.parse(reservations),
    raw_id = 'A36822';

for (var year in reservations_obj){
    if (raw_id in reservations_obj[year]){
        reservations_obj[year][raw_id]["notes_backend"] = "UPDATED NOTES";
        console.log('new_data:', reservations_obj[year][raw_id]); // new_data: {datetime: "6/22/17 at 11:00AM", visitors: "11 guests", notes_backend: "UPDATED NOTES"}
        console.log(JSON.stringify(reservations_obj)); // no changes
        break;
    }
}

... send updated reservations_obj to API

第一个console.log表示reservations_obj[year][raw_id]已更改,但第二个console.log向我显示初始reservations_obj,但没有任何更新。

上面的代码基于Python逻辑,但是如何在JavaScript中实现它?

2 个答案:

答案 0 :(得分:1)

您的代码工作正常..但请记住,预留变量已包含PARSED json。

var reservations = {
"2016":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 111"}},
"2017":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 222"}}
}

// var reservations_obj = JSON.parse(reservations),     // reservations is already PARSED!
var reservations_obj = reservations,
    raw_id = 'A36822';

for (var year in reservations_obj){
    if (raw_id in reservations_obj[year]){
        reservations_obj[year][raw_id]["notes_backend"] = "UPDATED NOTES!!!!!!!!!!!!!!!!!";
        console.log(JSON.stringify(reservations_obj));
        break;
    }
}

答案 1 :(得分:0)

你只有很少的语法错误。首先,JSON必须是一个字符串:

var reservations = `{
"2016":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 111"}},
"2017":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 222"}}
}`

这里的代码工作plunker几乎相同。 (打开控制台)