2013-10-03 14 views
13

Mam tablicę JSON, którą czyszczę w Pythonie. Chcę usunąć właściwość imageData:Usuwanie właściwości JSON w tablicy obiektów za pomocą Pythona

data.json

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

jestem utworzenie listy ze zrozumieniem, aby usunąć właściwość, ale nie jestem pewien, jak stworzyć zmienną, która koncentruje się na 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 

Kiedy print listę zrozumieniem, zwraca pustą tablicę. Co muszę poprawić, aby działało poprawnie?

Odpowiedz

26

Łatwym rozwiązaniem problemu jest usunięcie niechcianego klucza w miejscu, z del:

import json 

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

Należy dodać kilka kontroli bezpieczeństwa, ale masz pomysł.

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

jest pusty becaus wszystko mieć imageData. Jesteś po prostu testowanie dla niego, a nie usuwanie go.

Pętla powyżej date i del item['imageData'] na każdym item.

14

Jeśli nie wszystkie elementy mają klucz imageData, użycie del spowoduje wyjątek KeyError. Można zabezpieczyć się przed, że za pomocą pop z domyślnie:

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

Jak o:
clean_data = [k:v for k,v in data.iteritems() if k != 'imageData']

lub słowniku expresión/pojmowania jeśli chcesz słownika:
clean_data = {k:v for k,v in data.iteritems() if k != 'imageData'}

Powiązane problemy