Видаліть елемент json


111

Я хочу видалити елемент JSON або один цілий рядок з JSON.

У мене є наступний рядок JSON:

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

1
Я думаю, у вас все ще є деякі помилки json
Santosh Linkha

3
можливий дублікат видалення атрибута JSON
ChrisF

1
Я відповів на запитання, ви, можливо, захочете це подивитися. Я відповів, що багато людей не враховують, як працює сміття.
Ігри Brainiac

@ChrisF - не дублікат, оскільки видалення створить "невизначений" елемент у масиві
mplungjan

Відповіді:


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

Ви можете використовувати сплайс для видалення елементів з масиву.


5
Чому завжди найгірші відповіді вгорі? Можливо, це можуть бути пункти повторення? Я шукав. Я знайшов. Ви мали правильну відповідь.
Ерік Лерой

1
Я не отримую цієї відповіді. Де в тестових даних "foo"?
Тоні

9
Де стоїть у даних тесту? Ну, перший рядок - це фактично псевдокод. Замість json = {...} це було б щось на зразок json = {foo: 'value'}
aharris88

5
видалити json [ключ]; ? Скільки "FirstName" у наведеному прикладі? Неправильну відповідь.
Егуреллі

3
використовуючи delete , залишить нульовий елемент у масиві
MikeL

21

НЕ в коді JSON немає косів

ОНОВЛЕННЯ : вам потрібно використовувати array.splice, а не видаляти, якщо ви хочете видалити елементи з масиву в об'єкті

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 наступним чином:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Крім того, ви можете також пройти в індекс, щоб видалити атрибут:

delete bleh[1];

Однак, щоб зрозуміти деякі наслідки використання делетів, подивіться тут


6
  1. Виправити помилки в JSON: http://jsonlint.com/
  2. Розбирайте JSON (оскільки ви позначили це питання JavaScript, використовуйте json2.js )
  3. Видаліть властивість із створеного вами об'єкта
  4. Структуруйте об'єкт назад до JSON.

Драт - ти відповів, поки я знімав коми :(
mplungjan

6

Як описав @mplungjan, я хоч і мав рацію. Потім одразу натискаю на кнопку підвищення. Але дотримуючись її, я нарешті отримав помилку.

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

Видалити - це просто видалити дані, але "місце" все ще є невизначеним .

Я зробив це, і це працює як шарм:

data.result.splice(2,1);  

значення: видаліть 1 елемент у позиції 3 (оскільки масив вважається формою 0, тоді елемент під номером 3 зараховується як 2)


6

Я рекомендую spliceметод видалення об'єкта з масиву об'єктів 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.
        }
});

Я використовую це, тому що коли я використовую deleteметод, я отримую nullоб'єкт після цьогоJSON.stringify(json)


1
Сплайс повинен бути прийнятою відповіддю, видалення замінює документ json із вставкою NULL .... Я хотів видалити, щоб видалити його - зробіть зрощення.
Енді

5

Спробуйте наступне

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

Усі відповіді чудові, і він зробить те, про що ви також його запитаєте, але я вважаю, що найкращий спосіб видалити це, а найкращий спосіб для збору сміття (якщо ви працюєте з node.js) такий:

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

Таким чином сміттєзбірник node.jsзнатиме, що json['somekey']більше не потрібно, і видалить його.


Я також читав про те, як зробити це так, але не можу змусити це працювати. Він досі залишає нульові посилання
K20GH


0

якщо ми хочемо видалити один атрибут скажіть "firstName" з масиву, ми можемо використовувати функцію map разом із видаленням, як згадувалося вище

   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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.