2016-05-02 3 views
0

Nehmen wir an, ich möchte durch 100 JSON-Objekte analysieren und extrahieren ein bestimmtes Element aus dem Objekt zum Beispiel "Autor": "Mark Twain".Python, richtig behandeln Schlüsselfehler beim Analysieren JSON-Objekt

Wenn 1 der 100 JSON-Objekte Informationen fehlen und nicht den "Autor" -Schlüssel haben, wird ein Schlüsselfehler ausgelöst, der das Programm stoppt.

Was ist der beste Weg, um dieses Problem zu behandeln?

Auch wenn es im json-Objekt Redundanzen gibt, gibt es beispielsweise Schlüssel namens "authorFirstName": "Mark" und "authorlastName": "Twain", gibt es Möglichkeiten, diese anstelle des ursprünglichen "Author" -Schlüssels zu verwenden in dem Fall, dass „Autor“ fehlt

Antwort

3

Sie dict.get('key', default=None) den Wert zu erhalten, verwenden können, wenn der Schlüssel vorhanden

eine authors.json Datei wie folgt Angenommen:.

[ 
    { 
    "author": "Mark Twain" 
    }, 
    { 
    "authorFirstName": "Mark", 
    "authorLastName": "Twain" 
    }, 
    { 
    "noauthor": "error" 
    } 
] 

Sie können benutze folgendes

import json 

people = json.load(open("authors.json")) 

for person in people: 
    author = person.get('author') 
    # If there is no author key then author will be None 
    if not author: 
     # Try to get the first name and last name 
     fname, lname = person.get('authorFirstName'), person.get('authorLastName') 
     # If both first name and last name keys were present, then combine the data into a single author name 
     if fname and lname: 
      author = "{} {}".format(fname, lname) 

    # Now we either have an author because the author key existed, or we built it from the first and last names. 
    if author is not None: 
     print("Author is {}".format(author)) 
    else: 
     print("{} does not have an author".format(person)) 

OUTPUT

Author is Mark Twain 
Author is Mark Twain 
{u'noauthor': u'error'} does not have an author 
+0

Ihre Anforderungen Je nach, 'wenn Autor None ist:' besser geeignet sein können. Dies wird einen Fehler anzeigen, wenn 'author'' False' ist (gut, 'false' in der JSON),' "' ',' 0' oder '0.00'. Oder auch '[]' oder '{}'. Und ich denke 'null' (was in Python natürlich auf' None' hinausläuft). –

+0

Messepunkt @WayneWerner, aktualisiert. – sberry

Verwandte Themen