Supprimer l'élément json

111

Je souhaite supprimer l'élément JSON ou une ligne entière de JSON.

J'ai la chaîne JSON suivante:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}
Hitesh Prajapati
la source
1
je pense que vous avez encore des erreurs json
Santosh Linkha
3
duplication possible de Remove a JSON attribute
ChrisF
1
J'ai répondu à la question, vous voudrez peut-être y jeter un coup d'œil. J'ai ajouté la réponse car beaucoup de gens ne prennent pas en compte le fonctionnement de la collecte des ordures.
Games Brainiac
@ChrisF - pas un doublon car la suppression créera un élément "indéfini" dans le tableau
mplungjan

Réponses:

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

Vous pouvez utiliser splice pour supprimer des éléments d'un tableau.

Dteoh
la source
5
Pourquoi les pires réponses sont-elles toujours au sommet? Cela pourrait-il être les points de répétition? J'ai cherché. J'ai trouvé. Vous aviez la bonne réponse.
Eric Leroy
1
Je n'ai pas cette réponse. Où est «foo» dans les données de test?
Tony
9
Où est foo dans les données de test? Eh bien, la première ligne est en fait un pseudocode. Au lieu de json = {...}, ce serait quelque chose comme json = {foo: 'value'}
aharris88
5
supprimer json [clé]; ? Combien de "FirstName" dans l'exemple donné? Mauvaise réponse.
EGurelli
3
l'utilisation de la suppression laissera un élément nul dans le tableau
MikeL
21

N'ayez PAS de virgules de fin dans votre JSON

UPDATE : vous devez utiliser array.splice et ne pas supprimer si vous souhaitez supprimer des éléments du tableau dans l'objet

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
la source
15

Vous pouvez essayer de supprimer le JSON comme suit:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Vous pouvez également transmettre l'index pour supprimer un attribut:

delete bleh[1];

Cependant, pour comprendre certaines des répercussions de l'utilisation des suppressions, jetez un œil ici

Farax
la source
7

Je recommande une spliceméthode pour supprimer un objet du tableau d'objets 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.
        }
});

J'utilise ceci parce que quand j'utilise la deleteméthode, j'obtiens un nullobjet aprèsJSON.stringify(json)

Sahan
la source
1
Splice devrait être la réponse acceptée, delete remplace le document json par une insertion NULL .... Je voulais supprimer pour le supprimer - splice le fera.
Andy
6
  1. Corrigez les erreurs dans le JSON: http://jsonlint.com/
  2. Analyser le JSON (puisque vous avez balisé la question avec JavaScript, utilisez json2.js )
  3. Supprimer la propriété de l'objet que vous avez créé
  4. Remaniez l'objet en JSON.
Quentin
la source
Drat - vous avez répondu pendant que je supprimais des virgules :(
mplungjan
6

Comme décrit par @mplungjan, je pensais que c'était juste. Puis tout de suite, je clique sur le bouton d'augmentation du taux. Mais en le suivant, j'ai finalement eu une erreur.

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

Supprimer consiste simplement à supprimer les données, mais le «lieu» est toujours là comme non défini .

J'ai fait ça et ça marche comme un charme:

data.result.splice(2,1);  

ce qui signifie: supprimer 1 élément à la position 3 (car le tableau est compté à partir de 0, alors l'élément à n ° 3 est compté comme n ° 2)

Sulung Nugroho
la source
5

Essayez ceci suivant

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
la source
5

Toutes les réponses sont excellentes, et cela fera aussi ce que vous lui demandez, mais je pense que le meilleur moyen de supprimer cela, et le meilleur moyen pour le garbage collector (si vous exécutez node.js) est comme ceci:

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

De cette façon, le garbage collector pour node.jssaura que ce json['somekey']n'est plus nécessaire et le supprimera.

Jeux Brainiac
la source
J'ai lu comment faire de cette façon aussi, mais je ne peux pas faire fonctionner cela. Il laisse toujours les références nulles
K20GH
0

essaye ça

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

si nous voulons supprimer un attribut, disons "firstName" du tableau, nous pouvons utiliser la fonction map avec delete comme mentionné ci-dessus

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