2016-12-04 3 views
1

Ich arbeite an dem Erstellen einer Datei, in der Daten aus einer JSON-Datei gelesen werden können.Daten-Array entfernen JS

Ich kann neue Namen zu der Datei hinzufügen, aber ich kann nicht löschen. Wenn ich einen Namen zum Löschen eintrage, fügt er der Datei den Namen hinzu.

Warum wird & nicht gelöscht? Ziel ist es, einen bestimmten Namen aus der Liste löschen zu können.

Vielen Dank im Voraus! Hier ist mein Code mit Kommentaren zu dem, was ich versuche zu tun. Hier

// POST request to add to JSON & XML files 
router.post('/post/json', function(req, res) { 

    // Function to read in a JSON file, add to it & convert to XML 
    function appendJSON(obj) { 

     // Read in a JSON file 
     var JSONfile = fs.readFileSync('Staff.json', 'utf8'); 

     // Parse the JSON file in order to be able to edit it 
     var JSONparsed = JSON.parse(JSONfile); 

     // Add a new record into country array within the JSON file  
     JSONparsed.member.push(obj); 

     // Beautify the resulting JSON file 
     var JSONformated = JSON.stringify(JSONparsed, null, 4); 

     // Delte a specific entry from JSON file 
     var i = member.indexOf(" "); 
     if (i != -1) { 
      member.splice(i,1); 
     } 

     // Write the updated JSON file back to the system 
     fs.writeFileSync('Staff.json', JSONformated); 

     // Convert the updated JSON file to XML  
     var XMLformated = js2xmlparser.parse('staff', JSON.parse(JSONformated)); 

     // Write the resulting XML back to the system 
     fs.writeFileSync('Staff.xml', XMLformated); 
    } 

    // Call appendJSON function and pass in body of the current POST request 
    appendJSON(req.body); 

    // Re-direct the browser back to the page, where the POST request came from 
    res.redirect('back'); 
}); 

ist ein Beispiel für die Datei JSON

{ 
    "member": [ 
     { 
      "Full_Name": "", 
      "Address": "", 
      "Gender": "",  
      "Phone_Number": "" 
     } 
    ] 
} 

Antwort

1

Die splice Funktion entfernt das Element aus dem Array und gibt das gelöschte Element. Also, wenn Sie ein Element durch ein Attribut von Ihrem JSON wie Full_Name löschen möchten, müssen Sie zuerst den Index des Elements finden.

var nameToSearch = "MyName"; 
var itemIndex = -1; 
for(var i = 0; i < JSONparsed.member.length; i++) { 
    if(JSONparsed.member[i].Full_Name === nameToSearch) { 
     itemIndex = i; 
    } 
} 

Und dann können Sie das Element löschen, wie Sie es getan haben.

if (itemIndex != -1) { 
    JSONparsed.member.splice(itemIndex,1); 
} 

Das Problem, das Sie höchstwahrscheinlich war hatte, dass die itemIndex war durchweg -1 als indexOf nicht wissen, welche für das gesamte Objekt zu überprüfen Attribut und prüft nur.

Auch die folgenden Zeilen müssen nach dem obigen Code sein. (So, nachdem alle Änderungen, die Sie an die json)

// Beautify the resulting JSON file 
var JSONformated = JSON.stringify(JSONparsed, null, 4); 

Ich empfehle auch this turtorial über Javascript-Debugging zu lesen. Es macht dein Leben leichter, Fehler zu finden.

+0

Bin ich besser, das oben genannte zu verwenden oder eine Löschmethode hier zu verwenden? – ThisisD

+0

mein Schlechter, bekomme ich immer "spleißen" und "Scheibe" verwirrt. Stellt sich heraus, "Spleiß" ändert sich an Ort und Stelle :) –

+0

Die Spleißmethode gibt "Ein Array mit den gelöschten Elementen zurück." https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice#Return_value – baao

Verwandte Themen