Json öğesini kaldır


111

JSON öğesini veya bir satırın tamamını JSON'dan kaldırmak istiyorum.

Aşağıdaki JSON dizesine sahibim:

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

1
Hala bazı json hatalarınız olduğunu düşünüyorum
Santosh Linkha


1
Soruyu cevapladım, bir göz atmak isteyebilirsin. Cevabı ekledim çünkü çoğu insan çöp toplamanın nasıl çalıştığını dikkate almıyor.
Games Brainiac

@ChrisF - silme dizide "tanımsız" bir öğe oluşturacağından yineleme değil
mplungjan

Yanıtlar:


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

Bir diziden öğeleri kaldırmak için splice'ı kullanabilirsiniz .


5
Neden her zaman en kötü cevaplar en üstte? Rep puanları olabilir mi? Arıyorum. Buldum. Doğru cevabı verdin.
Eric Leroy

1
Bu cevabı anlamadım. Test verilerinde "foo" nerede?
Tony

9
Test verilerinde foo nerede? İlk satır aslında sözde koddur. Json = {...} yerine json = {foo: 'value'}
aharris88

5
json [anahtar] 'ı sil; ? Verilen örnekte kaç tane "FirstName" var? Yanlış cevap.
EGurelli

4
delete kullanmak dizide boş bir öğe bırakır
MikeL

21

JSON'nizin sonunda virgül BULUNMAYIN

GÜNCELLEME : Nesnedeki diziden öğeleri kaldırmak istiyorsanız, array.splice kullanmanız ve silmeniz gerekmez

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

JSON'u aşağıdaki gibi silmeyi deneyebilirsiniz:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Alternatif olarak, bir özniteliği silmek için dizine de geçebilirsiniz:

delete bleh[1];

Ancak, silme işlemlerinin bazı sonuçlarını anlamak için buraya bir göz atın


7

spliceJSON nesneleri dizisinden bir nesneyi kaldırma yöntemini öneririm .

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

Bunu kullanıyorum çünkü deleteyöntemi kullandığımda , nullyaptıktan sonra nesne alıyorumJSON.stringify(json)


1
Ekleme kabul edilen cevap olmalıdır, silme json belgesini NULL ekleme ile değiştirir .... Silmek istedim - ekleme olacaktır.
Andy

6
  1. JSON'daki hataları düzeltin: http://jsonlint.com/
  2. JSON'u ayrıştırın (soruyu JavaScript ile etiketlediğiniz için json2.js kullanın )
  3. Özelliği oluşturduğunuz nesneden silin
  4. Nesneyi JSON olarak yeniden dizgeye dönüştürün.

Drat - virgülleri kaldırırken yanıt
verdiniz

6

@Mplungjan tarafından açıklandığı gibi, doğru olduğunu düşündüm. Sonra hemen yukarı oran düğmesine tıklıyorum. Ama onu takip ederek sonunda bir hata aldım.

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

Silme yalnızca veriyi kaldırmaktır, ancak 'yer' hala tanımsız olarak oradadır .

Bunu yaptım ve bir cazibe gibi çalışıyor:

data.result.splice(2,1);  

anlamı: 3. konumdaki 1 öğeyi sil (çünkü dizi 0'dan sayılır, bu durumda 3 no'lu öğe 2 olarak sayılır)


5

Aşağıdakini dene

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

Tüm yanıtlar harika ve siz de istediğinizi yapacak, ancak bunu silmenin en iyi yolunun olduğuna inanıyorum ve çöp toplayıcı için en iyi yol (node.js çalıştırıyorsanız) şu şekildedir:

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

Bu şekilde çöp toplayıcı artık gerekli olmadığını node.jsbilecek json['somekey']ve silecektir.


Bunu bu şekilde yapmayı da okudum, ancak bunu işe yarayamıyorum. Hala boş referansları bırakıyor
K20GH

0

bunu dene

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

0

diziden bir özniteliği kaldırmak istersek "firstName" deyin, yukarıda belirtildiği gibi delete ile birlikte map işlevini kullanabiliriz

   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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.