2013-10-03 10 views
13

Ich habe ein JSON-Array, das ich in Python aufräumen. Ich mag die imageData Eigenschaft entfernen:Entfernen der JSON-Eigenschaft im Array von Objekten mit Python

data.json

[{"title": "foo", "imageData": "xyz123"}, 
{"title": "bar", "imageData": "abc123"}, 
{"title": "baz", "imageData": "def456"}] 

Ich bin die Einrichtung eine Liste Verständnis der Eigenschaft zu entfernen, aber ich bin nicht sicher, wie die Variable zu erstellen, die auf Schwerpunkte imageData:

import json 

with open('data.json') as json_data: 
    data = json.load(json_data) 
    clean_data = [ item for item in data if not item['imageData'] ] 
    # Write `clean_data` to new json file 

Wenn ich die Liste Verständnis print es ein leeres Array zurückgibt. Was muss ich korrigieren, damit das funktioniert?

Antwort

26

Eine einfache Lösung für Ihr Problem ist die unerwünschte Schlüssel anstelle des Löschens, mit del:

import json 

with open('data.json') as json_data: 
    data = json.load(json_data) 
    for element in data: 
     del element['imageData'] 

Sie sollten einige Sicherheitsüberprüfungen hinzufügen, aber Sie bekommen die Idee.

1
[ item for item in data if not item['imageData'] ] 

ist leer becaus alleimageData haben. Sie sind nur testen dafür, nicht entfernen es.

Schleife über date und del item['imageData'] auf jedem item.

14

Wenn nicht alle Elemente eine imageData Schlüssel, dann del verwendet, wird eine KeyError Ausnahme verursachen. Man könnte dagegen wappnen, indem pop mit einem Standard mit:

for item in data: 
    item.pop('image', None) 
0

Wie wäre:
clean_data = [k:v for k,v in data.iteritems() if k != 'imageData']

oder ein Wörterbuch expresion/Verständnis, wenn Sie ein Wörterbuch wollen:
clean_data = {k:v for k,v in data.iteritems() if k != 'imageData'}