Удалить элемент json

111

Я хочу удалить элемент JSON или одну целую строку из JSON.

У меня есть следующая строка JSON:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}
Хитеш Праджапати
источник
1
Я думаю, что у вас все еще есть ошибки json
Сантош Линкха
3
возможный дубликат атрибута Remove a JSON
ChrisF
1
Я ответил на вопрос, возможно, вы захотите взглянуть на него. Я добавил ответ, потому что многие люди не принимают во внимание, как работает сборка мусора.
Games Brainiac
@ChrisF - не дубликат, так как удаление создаст "неопределенный" элемент в массиве
mplungjan

Ответы:

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

Вы можете использовать splice для удаления элементов из массива.

dteoh
источник
5
Почему всегда наверху худшие ответы? Неужели это очки репутации? Я искал. Я нашел. У тебя был правильный ответ.
Эрик Лерой
1
Я не понимаю этого ответа. Где в тестовых данных "foo"?
Тони
9
Где foo в тестовых данных? Ну, первая строка на самом деле псевдокод. Вместо json = {...} это будет что-то вроде json = {foo: 'value'}
aharris88
5
удалить json [ключ]; ? Сколько «FirstName» в данном примере? Неправильный ответ.
EGurelli
4
использование 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.

mplungjan
источник
15

Вы можете попробовать удалить JSON следующим образом:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

В качестве альтернативы вы также можете передать индекс для удаления атрибута:

delete bleh[1];

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

Фаракс
источник
7

Я рекомендую 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)

Sahan
источник
1
Splice должен быть принятым ответом, delete заменяет json-документ вставкой NULL .... Я хотел удалить, чтобы удалить его - splice будет.
Энди
6
  1. Исправьте ошибки в JSON: http://jsonlint.com/
  2. Разберите JSON (поскольку вы отметили вопрос с помощью JavaScript, используйте json2.js )
  3. Удалите свойство из созданного вами объекта
  4. Верните объект в формат JSON.
Quentin
источник
Drat - вы ответили, пока я убирал запятые :(
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)

Сулунг Нугрохо
источник
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);
abcd
источник
5

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

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

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

Игры Brainiac
источник
Я тоже читал об этом, но я не могу заставить это работать. Он по-прежнему оставляет нулевые ссылки
K20GH
0

попробуй это

json = $.grep(newcurrPayment.paymentTypeInsert, function (el, idx) { return el.FirstName == "Test1" }, true)
Камран Уль Хак
источник
0

если мы хотим удалить один атрибут, скажем, "firstName" из массива, мы можем использовать функцию карты вместе с удалением, как упомянуто выше.

   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)
Рагху Валликкат
источник