2014-07-16 13 views
20

Ho questo oggetto JSON di seguito;Rimuovi coppia chiave-valore dall'oggetto JSON

[ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
] 

voglio rimuovere il valore-chiave YYY dall'oggetto JSON in modo tale che il nuovo oggetto JSON sarà simile a questa;

[ 
    { 
     XXX: "2",  
     ZZZ: "4" 
    }, 
    { 
     XXX: "5",  
     ZZZ: "7" 
    }, 
    { 
     XXX: "1",  
     ZZZ: "3" 
    } 
] 

Ho provato delete jsonObject['YYY'], ma questo non è corretto. Come si può fare in javascript? Grazie.

+0

Questa domanda è più sulla gestione di matrici di oggetti che altro per fare con JSON .. una volta che hai un oggetto Javascript che stai manipolando in memoria, il fatto che sia stato avviato come JSON in realtà non entra in esso. –

+0

possibile duplicato di [Elimina elemento dalla JSON Object] (http://stackoverflow.com/questions/15451290/remove-element-from-json-object) –

risposta

44

Quello che tu chiami la tua 'JSON oggetto' è in realtà un array di oggetti JSON. È necessario iterare su ogni e cancellare ogni membro singolarmente:

for(var i = 0; i < jsonArr.length; i++) { 
    delete jsonArry[i]['YYY']; 
} 
+0

Grazie. Verificato per essere la risposta corretta. – user781486

+0

grazie ....... si è perfettamente funzionante –

1

JsonObject è un array, quindi è necessario fare riferimento agli elementi di matrice. Prova delete jsonObject[0].YYY

4

scorrere i valori nella matrice, e rimuovere il valore con il tasto YYY:

var obj = [ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
]; 

for (var i = 0; i < obj.length; i++) { 
    delete obj[i].YYY 
} 
+0

Risposta corretta. Ma posso solo contrassegnare una risposta come risposta corretta su StackOverflow. Scusate. – user781486

1

Perché il vostro JSON è all'interno di un array , è necessario accedere a ciascun elemento della matrice ed eliminare le loro proprietà "YYY" O utilizzare carta per creare un oggetto ridotta, in questo modo:

var objs = [ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
]; 

objs = objs.map(function(obj) { 
    return { XXX: obj.XXX, ZZZ: obj.ZZZ }; 
}); 

U canta la funzione map. MDN: Array.prototype.map()

+0

La tua risposta è esattamente la stessa di Justin's –

+0

no non lo è. questo sta usando 'map' –

+0

Non stai nemmeno usando la mappa correttamente. Dal momento che non stai creando un nuovo array, la migliore pratica sarebbe quella di utilizzare per Each anziché per la mappa. Inoltre, la tua risposta in realtà non aggiunge nulla alla domanda. –

1

JSON è un testo, quindi se avete veramente di testo come:

var s = '[{XXX:"2",YYY:"3",ZZZ:"4"},{XXX:"5",YYY:"6",ZZZ:"7"},{XXX:"1",YYY:"2",ZZZ:"3"}]'; 

allora si può rimuovere le YYYs utilizzando stringa sostituire, qualcosa di simile:

s.replace(/YYY[^,}]+,/g,''); // [{XXX:"2",ZZZ:"4"},{XXX:"5",ZZZ:"7"},{XXX:"1",ZZZ:"3"}] 

Potrebbe essere necessario conto anche per YYY all'inizio o alla fine della stringa. Se si dispone di un oggetto creato da un oggetto letterale, utilizzare una delle altre risposte.

+0

Approccio interessante. Anche se fosse una stringa di testo, tenderei a optare per la conversione all'oggetto e quindi a filtrarlo con JS anziché con espressioni regolari. Vale la pena notare che il JSON valido richiede che vengano citate anche le chiavi. Quindi sarebbe ''[{" XXX ":" 2 "," YYY ":" 3 "," ZZZ ":" 4 "}, ...]';', e dovresti tenere conto della citazione segna pure. – nbrooks

0

Un'altra soluzione che evita mutando l'array originale e utilizza un tipo più recente (oggetto resto operatore & destrutturazione)

const arr = [ 
 
    { 
 
     XXX: "2", 
 
     YYY: "3", 
 
     ZZZ: "4" 
 
    }, 
 
    { 
 
     XXX: "5", 
 
     YYY: "6", 
 
     ZZZ: "7" 
 
    }, 
 
    { 
 
     XXX: "1", 
 
     YYY: "2", 
 
     ZZZ: "3" 
 
    } 
 
] 
 

 
// destructure 'YYY' and return the other props only 
 
const newArray = arr.map(({YYY, ...rest}) => rest) 
 

 
console.log(newArray)