2016-07-11 6 views
-1

Wenn Daten von JSON in dem Format unten kommen, kann ich es in ein Wörterbuch in Python verwandeln. Die Information ist jedoch nicht immer in der gleichen Reihenfolge. Zum Beispiel, first_name, würde ich annehmen, ist immer 0. Allerdings, wenn ich die Daten bekomme, abhängig von der verwendeten Form, kann in der 2-Position sein. Statt nun first_name im rechten db-Feld zu speichern, befindet es sich möglicherweise im Feld email.Passende JSON Schlüssel

Hier ist meine Frage: Wie stelle ich sicher, dass der Wert das db-Feld mit dem Schlüssel name entspricht, Wert?

{ 
    "name": "first_name", 
    "values": [ 
    "Joe" 
    ] 
}, 
{ 
    "name":"last_name", 
    "values": [ 
    "Example" 
    ] 
}, 
{ 
    "name": "email", 
    "values": [ 
    "[email protected]" 
    ] 
} 

Vielen Dank, wie immer!

:-)

aktualisieren Hier ist, wie ich den Code zugreifen:

first_name = data['field_data'][0]['values'][0].encode('utf-8') 
last_name = data['field_data'][1]['values'][0].encode('utf-8') 
email = data['field_data'][2]['values'][0].encode('utf-8') 
telephone = data['field_data'][3]['values'][0].encode('utf-8') 

Ich mache die Annahme, dass first_name immer bei sein, auch wenn das nicht der Fall. Das Python speichert die Daten, es setzt E-Mails an Stellen, an denen first_name sein sollte. Ich versuche, einen Weg zu finden, um zu überprüfen, ob der Schlüssel JSON name mit dem gleichen Datenbankfeld übereinstimmt, bevor die Daten gesendet werden.

+1

Durch den entsprechenden Zugriff auf das Wörterbuch? –

+1

Vermissen Sie eckige Klammern? Was Sie haben, ist kein gültiger JSON. –

+0

@ juanpa.arrivillaga Es ist nur ein Beispiel. – joshlsullivan

Antwort

2

Anstatt sich auf die Reihenfolge zu verlassen, die, wie Sie angegeben haben, fragil ist, sollten Sie nach dem Element suchen, das den gewünschten Namen hat, indem Sie das Array durchlaufen.

Zum Beispiel:

data = { 
    'field_data' : [ 
     { 
      "name": "first_name", 
      "values": [ 
      "Joe" 
      ] 
     }, 
     { 
      "name":"last_name", 
      "values": [ 
      "Example" 
      ] 
     }, 
     { 
      "name": "email", 
      "values": [ 
      "[email protected]" 
      ] 
     } 
    ] 
} 

def get_values(name): 
    for data_element in data.get('field_data'): 
     if data_element.get('name') == name: 
      return data_element.get('values') 

    return None 

if __name__ == "__main__": 

    first_name = get_values('first_name')[0] 
    last_name = get_values('last_name')[0] 
    email = get_values('email')[0] 

    print 'first_name: ' + first_name 
    print 'last_name: ' + last_name 
    print 'email: ' + email 

In diesem Beispiel ist die get_values Funktion sucht das Element, das den gewünschten Namen hat. Am Ende des Beispiels verwenden wir es, um first_name, last_name und email abzurufen.

+0

Ich liebe, dass Sie es eine Funktion gemacht haben. Ich arbeite in einer Django-Klasse und bin mir nicht sicher, wie ich es dort schaffen soll. Ich werde weiter daran arbeiten, aber genau das habe ich gesucht. Vielen Dank! – joshlsullivan

0

unter der Annahme

data = {"field_data":[{ 
    "name": "first_name", 
    "values": [ 
    "Joe" 
    ] 
}, 
{ 
    "name":"last_name", 
    "values": [ 
    "Example" 
    ] 
}, 
{ 
    "name": "email", 
    "values": [ 
    "[email protected]" 
    ] 
}]} 

Dies ist eine ziemlich einfache Möglichkeit, alle Ihre Felder iterieren und wenn Sie ein Spiel für das finden, was Sie suchen, weisen nur darauf. Also fügen Sie weitere ifs für den Rest Ihrer gewünschten Daten hinzu

for thing in data['field_data']: 
    if thing['name'] == 'first_name': 
     first_name = thing['values'][0] 
+0

Ich wusste, es wäre eine super einfache Lösung. Vielen Dank! – joshlsullivan