2017-05-16 5 views
2

Ich möchte Daten von einer Tabelle in eine andere verschieben, wobei dazwischen eine Verarbeitung stattfindet. Die Daten sind ein großes Json-Objekt an der Quelle, so dass ich versuche, einzelne Werte auszublenden, um die Daten auszuwählen. Ich übergebe die Daten Zeile für Zeile in die folgende Funktion.Zugriff auf verschachtelte Werte

def transformBadges(row): 
    for inner_row in row: 
     for element in inner_row : 
      id = element['id'] 
      archived = element['archived'] 
      type = element['type'] 
      name = element['name'] 
      badge_id = str(uuid.uuid4()) 

      insertBadge(id, archived, type, name, badge_id) 

row enthält meine Zielspalte, im Wesentlichen. Allerdings habe ich meine Auswahl aktualisiert, um ein paar weitere Spalten auszuwählen. Aus diesem Grunde hatte ich den obigen Code auf die unten zu ändern:

def transformBadges(row): 
    badges = row['badges'] 
    for inner_row in badges: 
     for element in inner_row: 
      id = element['id'] 
      archived = element['archived'] 
      type = element['type'] 
      name = element['name'] 
      badge_id = str(uuid.uuid4()) 

      insertBadge(id, archived, type, name, badge_id) 

In meinem Kopf, dann ist es genau die gleiche - nur jetzt mit den in einer anderen Variablen gespeicherten Daten. Allerdings bekomme ich diesen Fehler:

Traceback (most recent call last): 
    File "etl/main.py", line 537, in <module> 
    main() 
    File "etl/main.py", line 99, in main 
    transformBadges(row) 
    File "etl/main.py", line 106, in transformBadges 
    id = element['id'] 
TypeError: string indices must be integers 

Warum sollte die erste Arbeit, aber nicht die zweite?

Antwort

2
def transformBadges(row): 
    badges = row['badges'] 
    for element in badges: 
     id = element['id'] 
     archived = element['archived'] 
     type = element['type'] 
     name = element['name'] 
     badge_id = str(uuid.uuid4()) 

     insertBadge(id, archived, type, name, badge_id) 

Da badges jetzt ein inner_row bereits

+1

Aha ist, macht Sinn! Wird nach Ablauf des Zeitlimits akzeptiert – Someguywhocodes