Usuń element JSON

111

Chcę usunąć element JSON lub cały wiersz z JSON.

Mam następujący ciąg JSON:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}
Hitesh Prajapati
źródło
1
Myślę, że nadal masz błędy json
Santosh Linkha
3
możliwy duplikat Usuń atrybut JSON
ChrisF
1
Odpowiedziałem na pytanie, może zechcesz rzucić okiem. Dodałem odpowiedź, ponieważ wiele osób nie bierze pod uwagę, jak działa zbieranie śmieci.
Games Brainiac
@ChrisF - nie jest to duplikat, ponieważ usunięcie spowoduje utworzenie „niezdefiniowanego” elementu w tablicy
mplungjan

Odpowiedzi:

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

Możesz użyć złącza, aby usunąć elementy z tablicy.

dteoh
źródło
5
Dlaczego najgorsze odpowiedzi są zawsze na górze? Czy to możliwe, że to punkty rep? Szukałem. Znalazłem. Masz poprawną odpowiedź.
Eric Leroy
1
Nie rozumiem tej odpowiedzi. Gdzie w danych testowych jest „foo”?
Tony
9
Gdzie jest foo w danych testowych? Cóż, pierwsza linia to właściwie pseudokod. Zamiast json = {...} byłoby coś takiego jak json = {foo: 'value'}
aharris88
5
usuń json [klucz]; ? Ile „FirstName” w podanym przykładzie? Zła odpowiedź.
EGurelli
3
użycie delete spowoduje pozostawienie pustego elementu w tablicy
MikeL,
21

NIE umieszczaj na końcu przecinków w swoim JSON

UPDATE : musisz użyć array.splice i nie usuwać, jeśli chcesz usunąć elementy z tablicy w obiekcie

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
źródło
15

Możesz spróbować usunąć JSON w następujący sposób:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Alternatywnie możesz również przekazać indeks, aby usunąć atrybut:

delete bleh[1];

Jednak, aby zrozumieć niektóre konsekwencje używania usuwania, zajrzyj tutaj

Farax
źródło
7

Polecam splicemetodę usuwania obiektu z tablicy obiektów 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.
        }
});

Używam tego, ponieważ kiedy używam deletemetody, nullpo wykonaniu tej czynności otrzymuję obiektJSON.stringify(json)

Sahan
źródło
1
Splice powinno być akceptowaną odpowiedzią, delete zastępuje dokument json z wstawką NULL ... Chciałem usunąć, aby go usunąć - połączenie to zrobi.
Andy
6
  1. Napraw błędy w JSON: http://jsonlint.com/
  2. Przeanalizuj JSON (ponieważ otagowałeś pytanie JavaScript, użyj json2.js )
  3. Usuń właściwość z utworzonego obiektu
  4. Stringify obiekt z powrotem do JSON.
Quentin
źródło
Drat - odpowiedziałeś, kiedy
usuwałem
6

Jak opisał @mplungjan, myślałem, że to prawda. Następnie od razu klikam przycisk w górę stawki. Ale idąc za tym, w końcu otrzymałem błąd.

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

Usuń to po prostu usunięcie danych, ale „miejsce” nadal istnieje jako niezdefiniowane .

Zrobiłem to i działa jak marzenie:

data.result.splice(2,1);  

znaczenie: usuń 1 pozycję na pozycji 3 (ponieważ tablica jest liczona od 0, wówczas pozycja nr 3 jest liczona jako nr 2)

Sulung Nugroho
źródło
5

Spróbuj tego

var myJSONObject ={"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
console.log(myJSONObject);
console.log(myJSONObject.ircEvent);
delete myJSONObject.ircEvent 
delete myJSONObject.regex 
console.log(myJSONObject);
abcd
źródło
5

Wszystkie odpowiedzi są świetne i zrobi to, o co go zapytasz, ale uważam, że najlepszym sposobem na usunięcie tego, a najlepszym sposobem dla modułu odśmiecania pamięci (jeśli używasz node.js) jest to:

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

W ten sposób garbage collector dla node.jsbędzie wiedział, że json['somekey']nie jest już potrzebny i usunie go.

Gry Brainiac
źródło
Czytałem też o robieniu tego w ten sposób, ale nie mogę tego uruchomić. Nadal pozostawia zerowe odniesienia
K20GH
0

Spróbuj tego

json = $.grep(newcurrPayment.paymentTypeInsert, function (el, idx) { return el.FirstName == "Test1" }, true)
Kamran Ul Haq
źródło
0

jeśli chcemy usunąć jeden atrybut, powiedz „firstName” z tablicy, możemy użyć funkcji map wraz z usunięciem, jak wspomniano powyżej

   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
źródło