Eliminar el elemento json

111

Quiero eliminar el elemento JSON o una fila completa de JSON.

Tengo la siguiente cadena JSON:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}
Hitesh Prajapati
fuente
1
Creo que todavía tienes algunos errores
JSON
3
posible duplicado de Eliminar un atributo JSON
ChrisF
1
Respondí la pregunta, es posible que desee echarle un vistazo. Agregué la respuesta porque muchas personas no tienen en cuenta cómo funciona la recolección de basura.
Juegos Brainiac
@ChrisF - no es un duplicado ya que eliminar creará un elemento "indefinido" en la matriz
mplungjan

Respuestas:

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

Puede usar empalme para eliminar elementos de una matriz.

dteoh
fuente
5
¿Por qué siempre aparecen las peores respuestas en la parte superior? ¿Podrían ser los puntos de repetición? Yo busqué. Encontré. Tenías la respuesta correcta.
Eric Leroy
1
No obtengo esta respuesta. ¿Dónde está "foo" en los datos de prueba?
Tony
9
¿Dónde está foo en los datos de prueba? Bueno, la primera línea es en realidad un pseudocódigo. En lugar de json = {...}, sería algo como json = {foo: 'value'}
aharris88
5
eliminar json [clave]; ? ¿Cuántos "FirstName" en el ejemplo dado? Respuesta incorrecta.
EGurelli
3
el uso de eliminar dejará un elemento nulo en la matriz
MikeL
21

NO tenga comas finales en su JSON

ACTUALIZACIÓN : debe usar array.splice y no eliminar si desea eliminar elementos de la matriz en el objeto

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

Puede intentar eliminar el JSON de la siguiente manera:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Alternativamente, también puede pasar el índice para eliminar un atributo:

delete bleh[1];

Sin embargo, para comprender algunas de las repercusiones del uso de eliminaciones, eche un vistazo aquí

Farax
fuente
6
  1. Corrija los errores en JSON: http://jsonlint.com/
  2. Analice el JSON (ya que ha etiquetado la pregunta con JavaScript, use json2.js )
  3. Elimina la propiedad del objeto que creaste
  4. Vuelva a convertir el objeto en JSON.
Quentin
fuente
Maldita sea - respondiste mientras quitaba las comas :(
mplungjan
6

Como lo describió @mplungjan, pensé que estaba bien. Luego, de inmediato, hago clic en el botón de tasa ascendente. Pero al seguirlo, finalmente obtuve un error.

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

Eliminar es simplemente eliminar los datos, pero el 'lugar' sigue ahí como indefinido .

Hice esto y funciona a las mil maravillas:

data.result.splice(2,1);  

significado: eliminar 1 elemento en la posición 3 (porque la matriz se cuenta desde 0, entonces el elemento en el número 3 se cuenta como el número 2)

Sulung Nugroho
fuente
6

Recomiendo el splicemétodo para eliminar un objeto de la matriz de objetos 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.
        }
});

Utilizo esto porque cuando uso el deletemétodo, obtengo un nullobjeto después de hacerloJSON.stringify(json)

Sahan
fuente
1
El empalme debería ser la respuesta aceptada, eliminar reemplaza el documento json con una inserción NULL .... Quería eliminar para eliminarlo: el empalme lo hará.
Andy
5

Prueba esto siguiente

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

Todas las respuestas son geniales y también hará lo que le pida, pero creo que la mejor manera de eliminar esto, y la mejor manera para el recolector de basura (si está ejecutando node.js) es así:

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

De esta manera, el recolector de basura node.jssabrá que json['somekey']ya no es necesario y lo eliminará.

Juegos Brainiac
fuente
También he leído acerca de hacerlo de esta manera, pero no puedo hacer que esto funcione. Todavía deja las referencias nulas
K20GH
0

prueba esto

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

si queremos eliminar un atributo, diga "firstName" de la matriz, podemos usar la función de mapa junto con eliminar como se mencionó anteriormente

   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
fuente