Remover elemento json

111

Quero remover o elemento JSON ou uma linha inteira do JSON.

Eu tenho a seguinte string JSON:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}
Hitesh Prajapati
fonte
1
Acho que ainda tem alguns erros json
Santosh Linkha
3
possível duplicata de Remover um atributo JSON
ChrisF
1
Eu respondi à pergunta, talvez você queira dar uma olhada nisso. Eu adicionei a resposta porque muitas pessoas não levam em consideração como funciona a coleta de lixo.
Games Brainiac
@ChrisF - não é uma duplicata, pois deletar criará um item "indefinido" na matriz
mplungjan

Respostas:

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

Você pode usar splice para remover elementos de uma matriz.

dteoh
fonte
5
Por que as piores respostas estão sempre no topo? Podem ser os pontos de repetição? Eu pesquisei. Eu encontrei. Você teve a resposta correta.
Eric Leroy
1
Eu não recebo essa resposta. Onde está "foo" nos dados de teste?
Tony
9
Onde está foo nos dados de teste? Bem, a primeira linha é, na verdade, um pseudocódigo. Em vez de json = {...}, seria algo como json = {foo: 'value'}
aharris88
5
delete json [chave]; ? Quantos "FirstName" em determinado exemplo? Resposta errada.
EGurelli
3
usar delete deixará um elemento nulo na matriz
MikeL
21

NÃO coloque vírgulas finais em seu JSON

ATUALIZAÇÃO : você precisa usar array.splice e não excluir se quiser remover itens da matriz no 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
fonte
15

Você pode tentar excluir o JSON da seguinte maneira:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Como alternativa, você também pode passar o índice para excluir um atributo:

delete bleh[1];

No entanto, para entender algumas das repercussões do uso de exclusões, dê uma olhada aqui

Farax
fonte
7

Eu recomendo o splicemétodo para remover um objeto da 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.
        }
});

Eu uso isso porque quando eu uso o deletemétodo, eu obtenho o nullobjeto depois de fazerJSON.stringify(json)

Sahan
fonte
1
A emenda deve ser a resposta aceita, a exclusão substitui o documento json por uma inserção NULL ... Eu queria excluir para excluí-lo - a emenda será.
Andy
6
  1. Corrija os erros no JSON: http://jsonlint.com/
  2. Analise o JSON (já que você marcou a pergunta com JavaScript, use json2.js )
  3. Exclua a propriedade do objeto que você criou
  4. Stringify o objeto de volta para JSON.
Quentin
fonte
Droga - você respondeu enquanto eu removia as vírgulas :(
mplungjan
6

Conforme descrito por @mplungjan, achei que estava certo. Em seguida, clico no botão de aumentar a taxa. Mas, ao segui-lo, finalmente cometi um erro.

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

Excluir é apenas remover os dados, mas o 'lugar' ainda está lá como indefinido .

Eu fiz isso e funciona como um encanto:

data.result.splice(2,1);  

significando: exclua 1 item na posição 3 (porque a matriz é contada forma 0, então o item no 3 é contado como no 2)

Sulung Nugroho
fonte
5

Experimente o seguinte

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

Todas as respostas são ótimas e fará o que você pedir também, mas acredito que a melhor maneira de deletar isso, e a melhor maneira para o coletor de lixo (se você estiver executando node.js) é assim:

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

Desta forma, o coletor de lixo node.jssaberá que json['somekey']não é mais necessário e o apagará.

Jogos Brainiac
fonte
Eu li sobre como fazer isso também, mas não consigo fazer isso funcionar. Ainda deixa as referências nulas
K20GH de
0

tente isso

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

se quisermos remover um atributo diga "firstName" do array, podemos usar a função map juntamente com delete como mencionado acima

   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
fonte