2017-09-27 1 views
1

Ich habe die nächsten Daten:Wie kann ich Änderungen in einem tief verschachtelten Objekt speichern?

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"}} 
} 

Ich muss dann aktualisiert senden reservations API einige notes_backend und ändern.

Hier ist mein Code:

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 

Die erste console.log zeigt, dass reservations_obj[year][raw_id] geändert wird, aber die zweite console.log zeigt mir anfängliche reservations_obj ohne Updates.

Der obige Code basiert auf Python-Logik, aber wie implementiert man es in JavaScript?

+1

Könnten Sie bitte erklären, was genau das Problem ist, weil Ihr Code bereits JavaScript-Implementierung ist. –

+0

Bitte beachten Sie die Kommentare im Code. Das erste 'console.log' zeigt, dass' reservations_obj [Jahr] [raw_id] 'geändert wurde, aber das zweite' console.log' zeigt mir das erste 'reservations_obj' ohne irgendwelche Updates. – TitanFighter

+4

Wenn ich die Syntaxfehler entferne, die durch die Verwendung des falschen Symbols für "Beginn des Kommentars" für die Sprache verursacht wurden, scheint es zu funktionieren. Was ist das Problem? (Voting, um Off-Topic als durch einen Tippfehler verursacht zu schließen) – Quentin

Antwort

0

Sie hatten nur wenige Syntaxfehler. Vor allem JSON muss eine Zeichenfolge sein:

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"}} 
}` 

hier plunker mit fast dem gleichen Code arbeiten. (offene Konsole)

1

Ihr Code funktioniert gut .. aber bedenken Sie, dass die Reservierung Variable enthält bereits 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; 
    } 
} 
Verwandte Themen