Json-Element entfernen

111

Ich möchte das JSON-Element oder eine ganze Zeile aus JSON entfernen.

Ich habe folgende JSON-Zeichenfolge:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}
Hitesh Prajapati
quelle
1
Ich denke, Sie haben immer noch einige JSON-Fehler
Santosh Linkha
3
Mögliches Duplikat von JSON-Attribut entfernen
ChrisF
1
Ich habe die Frage beantwortet, vielleicht möchten Sie sie sich ansehen. Ich habe die Antwort hinzugefügt, weil viele Leute nicht berücksichtigen, wie die Speicherbereinigung funktioniert.
Spiele Brainiac
@ChrisF - kein Duplikat, da Löschen ein "undefiniertes" Element im Array erstellt
mplungjan

Antworten:

188
var json = { ... };
var key = "foo";
delete json[key]; // Removes json.foo from the dictionary.

Sie können Spleiß verwenden , um Elemente aus einem Array zu entfernen.

dteoh
quelle
5
Warum sind immer die schlechtesten Antworten oben? Könnte es möglicherweise die Wiederholungspunkte sein? Ich suchte. Ich fand. Sie hatten die richtige Antwort.
Eric Leroy
1
Ich verstehe diese Antwort nicht. Wo ist "foo" in den Testdaten?
Tony
9
Wo ist foo in den Testdaten? Nun, die erste Zeile ist eigentlich Pseudocode. Anstelle von json = {...} wäre es so etwas wie json = {foo: 'value'}
aharris88
5
json [key] löschen; ? Wie viele "Vornamen" in einem Beispiel? Falsche Antwort.
EGurelli
3
mit Lösch wird ein Null - Element in dem Feld verlassen
MikeL
21

Das JSON enthält KEINE nachgestellten Kommas

UPDATE : Sie müssen array.splice verwenden und nicht löschen, wenn Sie Elemente aus dem Array im Objekt entfernen möchten

var data = {
  "result": [{
    "FirstName": "Test1",
    "LastName": "User"
  }, {
    "FirstName": "user",
    "LastName": "user"
  }]
}
console.log(data.result);
console.log("------------ deleting -------------");
delete data.result[1];
console.log(data.result); // note the "undefined" in the array.


data = {
  "result": [{
    "FirstName": "Test1",
    "LastName": "User"
  }, {
    "FirstName": "user",
    "LastName": "user"
  }]
}

console.log(data.result);
console.log("------------ slicing -------------");
var deletedItem = data.result.splice(1,1);
console.log(data.result); // here no problem with undefined.

mplungjan
quelle
15

Sie können versuchen, den JSON wie folgt zu löschen:

var bleh = {first: '1', second: '2', third:'3'}

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Alternativ können Sie auch den Index übergeben, um ein Attribut zu löschen:

delete bleh[1];

Um jedoch einige der Auswirkungen der Verwendung von Löschvorgängen zu verstehen, schauen Sie hier

Farax
quelle
6
  1. Beheben Sie die Fehler im JSON: http://jsonlint.com/
  2. Analysieren Sie den JSON (da Sie die Frage mit JavaScript markiert haben, verwenden Sie json2.js )
  3. Löschen Sie die Eigenschaft aus dem von Ihnen erstellten Objekt
  4. Stringifizieren Sie das Objekt zurück zu JSON.
QUentin
quelle
Drat - Sie antworteten, während ich Kommas entfernte :(
mplungjan
6

Wie von @mplungjan beschrieben, fand ich es richtig. Dann klicke ich sofort auf die Schaltfläche "Rate erhöhen". Aber als ich es befolgte, bekam ich endlich einen Fehler.

<script>
var data = {"result":[
  {"FirstName":"Test1","LastName":"User","Email":"[email protected]","City":"ahmedabad","State":"sk","Country":"canada","Status":"False","iUserID":"23"},
  {"FirstName":"user","LastName":"user","Email":"[email protected]","City":"ahmedabad","State":"Gujarat","Country":"India","Status":"True","iUserID":"41"},
  {"FirstName":"Ropbert","LastName":"Jones","Email":"[email protected]","City":"NewYork","State":"gfg","Country":"fgdfgdfg","Status":"True","iUserID":"48"},
  {"FirstName":"hitesh","LastName":"prajapti","Email":"[email protected]","City":"","State":"","Country":"","Status":"True","iUserID":"78"}
  ]
}
alert(data.result)
delete data.result[3]
alert(data.result)
</script>

Löschen ist nur das Entfernen der Daten, aber der 'Ort' ist immer noch als undefiniert vorhanden .

Ich habe das gemacht und es funktioniert wie ein Zauber:

data.result.splice(2,1);  

Bedeutung: 1 Element an Position 3 löschen (da das Array von 0 gezählt wird, wird das Element an Nr. 3 als Nr. 2 gezählt)

Sulung Nugroho
quelle
6

Ich empfehle eine spliceMethode zum Entfernen eines Objekts aus dem JSON-Objektarray.

jQuery(json).each(function (index){
        if(json[index].FirstName == "Test1"){
            json.splice(index,1); // This will remove the object that first name equals to Test1
            return false; // This will stop the execution of jQuery each loop.
        }
});

Ich benutze dies, weil ich, wenn ich die deleteMethode benutze , ein nullObjekt bekomme , nachdem ich es getan habeJSON.stringify(json)

Sahan
quelle
1
Spleißen sollte die akzeptierte Antwort sein, Löschen ersetzt das JSON-Dokument durch eine NULL-Einfügung .... Ich wollte Löschen, um es zu löschen - Spleißen wird.
Andy
5

Versuchen Sie Folgendes

var myJSONObject ={"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
console.log(myJSONObject);
console.log(myJSONObject.ircEvent);
delete myJSONObject.ircEvent 
delete myJSONObject.regex 
console.log(myJSONObject);
A B C D
quelle
5

Alle Antworten sind großartig, und es wird auch das tun, was Sie verlangen, aber ich glaube, der beste Weg, dies zu löschen, und der beste Weg für den Garbage Collector (wenn Sie node.js ausführen) ist folgender:

var json = { <your_imported_json_here> };
var key = "somekey";
json[key] = null;
delete json[key];

Auf diese Weise erkennt der Garbage Collector für node.js, dass dies json['somekey']nicht mehr erforderlich ist, und löscht es.

Spiele Brainiac
quelle
Ich habe auch darüber gelesen, aber ich kann das nicht zum Laufen bringen. Es
bleiben
0

Versuche dies

json = $.grep(newcurrPayment.paymentTypeInsert, function (el, idx) { return el.FirstName == "Test1" }, true)
Kamran Ul Haq
quelle
0

Wenn wir ein Attribut entfernen möchten, sagen wir "firstName" aus dem Array, können wir die Map-Funktion zusammen mit delete wie oben erwähnt verwenden

   var result= [
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]

result.map( el=>{
    delete el["FirstName"]
})
console.log("OUT",result)
Raghu Vallikkat
quelle