Rimuovi l'elemento json


111

Voglio rimuovere l'elemento JSON o un'intera riga da JSON.

Ho la seguente stringa JSON:

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

1
Penso che tu abbia ancora degli errori JSON
Santosh Linkha

3
possibile duplicato dell'attributo Rimuovi un JSON
ChrisF

1
Ho risposto alla domanda, potresti dare un'occhiata. Ho aggiunto la risposta perché molte persone non prendono in considerazione il funzionamento della garbage collection.
Giochi Brainiac

@ChrisF - non è un duplicato poiché l'eliminazione creerà un elemento "non definito" nell'array
mplungjan

Risposte:


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

È possibile utilizzare splice per rimuovere elementi da un array.


5
Perché le risposte peggiori sono sempre in cima? Potrebbe essere il punto di rep? Ho cercato. Ho trovato. Hai avuto la risposta corretta.
Eric Leroy

1
Non ottengo questa risposta. Dov'è "foo" nei dati del test?
Tony

9
Dov'è foo nei dati del test? Ebbene, la prima riga è in realtà uno pseudocodice. Invece di json = {...}, sarebbe qualcosa come json = {foo: 'value'}
aharris88

5
cancella json [chiave]; ? Quanti "FirstName" nell'esempio dato? Risposta sbagliata.
EGurelli

3
l'utilizzo di delete lascerà un elemento nullo nell'array
MikeL

21

NON avere virgole finali nel tuo JSON

AGGIORNAMENTO : è necessario utilizzare array.splice e non eliminare se si desidera rimuovere elementi dall'array nell'oggetto

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.


15

Puoi provare a eliminare il JSON come segue:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

In alternativa, puoi anche passare l'indice per eliminare un attributo:

delete bleh[1];

Tuttavia, per comprendere alcune delle ripercussioni dell'utilizzo delle eliminazioni, dai un'occhiata qui


7

Consiglio il splicemetodo per rimuovere un oggetto dall'array di oggetti JSON.

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.
        }
});

Lo uso perché quando uso il deletemetodo, ottengo l' nulloggetto dopo averlo fattoJSON.stringify(json)


1
Splice dovrebbe essere la risposta accettata, elimina sostituisce il documento json con un inserimento NULL .... Volevo eliminare per eliminarlo - splice lo farà.
Andy

6
  1. Correggi gli errori nel JSON: http://jsonlint.com/
  2. Analizza il JSON (poiché hai taggato la domanda con JavaScript, usa json2.js )
  3. Elimina la proprietà dall'oggetto che hai creato
  4. Stringifica l'oggetto in JSON.

Drat - hai risposto mentre stavo rimuovendo le virgole :(
mplungjan

6

Come descritto da @mplungjan, ho pensato che fosse giusto. Quindi faccio subito clic sul pulsante di aumento del tasso. Ma seguendolo, ho finalmente ricevuto un errore.

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

Eliminare è solo rimuovere i dati, ma il "luogo" è ancora lì come non definito .

L'ho fatto e funziona come un fascino:

data.result.splice(2,1);  

significato: elimina 1 elemento nella posizione 3 (poiché l'array viene contato da 0, quindi l'elemento al n. 3 viene conteggiato come n. 2)


5

Prova questo di seguito

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

5

Tutte le risposte sono fantastiche, e farà anche quello che chiedi, ma credo che il modo migliore per eliminarlo e il modo migliore per il garbage collector (se stai eseguendo node.js) è così:

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

In questo modo il garbage collector node.jssaprà che json['somekey']non è più necessario e lo cancellerà.


Ho letto anche di come farlo in questo modo, ma non riesco a farlo funzionare. Lascia ancora i riferimenti nulli
K20GH

0

prova questo

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

0

se vogliamo rimuovere un attributo dì "firstName" dall'array possiamo usare la funzione map insieme a delete come menzionato sopra

   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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.