2017-06-14 1 views
-1

Hallo Ich habe einige JSON API-Ausgabedaten, die ich versuche, umstrukturieren/umformatieren. Hier ist ein Beispiel für die Ausgabe:Umstrukturierung und Neuformatierung JSON API-Ausgabedaten

{ 
"playergamelogs: { 
    "gamelogs": [ 
    { 
     "game" : { 
     "date" : "2016-10-13" 
     "id" : "32637}, 
     "player": { 
     "ID": "4419"}, 
     "team" : { 
     "id" : "16}, 
     "stats" : { 
      "minutes": "10"} 
     }, 
     { 
     "game": { 
     "date" : "2016-10-17" 
     "id" : "33737}, 
     "player": { 
     "ID": "4419"}, 
     "team" : { 
     "id" : "16 
     }, 
     "stats" : { 
      "minutes": "10" 

Was würde Ich mag es, Gruppe tun, um die Daten, die von Spieler-ID (oder den Namen). Zum Beispiel:

`{ 
    "playerlogs" : [ 
    { 
     "player" : { 
     "ID" : "4419" 
     "team" : { 
      "id" : "16" 
     }, 
     "gamelogs" : [ 
      { 
      "game" : {} 
      "game" : {} 
      } 
     } 
     "player" : { 
     .... 
     } 
     }` 

Der beste Weg, die ich denken kann, um dies zu erreichen for-Schleifen verschachtelt ist mit dict.items() und wenn Aussagen des entsprechenden Spieler-IDs entsprechen. Ich habe Probleme mit dem effizientesten Weg zur Umstrukturierung. Ich bin ziemlich neu bei Python und jede Hilfe wird sehr geschätzt.

+0

Was hast du bisher probiert? –

+0

Keine Notwendigkeit, von Anfang an "den effizientesten Weg" zu gehen. Stellen Sie nur sicher, dass es funktioniert und kümmern Sie sich später um Optimierung. –

+0

Entschuldigung wollte den ersten Post nicht durcheinander bringen. Ich habe hinzugefügt, was ich oben versucht habe – Maarten

Antwort

0

Hier ist, wie ich in der Lage war meine erste Frage zu lösen und die ursprünglichen Daten umformatieren:

for i in range(0,len(dataedit)): 
playerID = dataedit[i]["player"]["ID"] 
if not any(p.get('player',{}).get('ID',{}) == playerID for p in playerlog): 
    playerlog.append({}) 
    playerlog[x]["player"] = dataedit[i]["player"] 
    x+=1 
gameID = dataedit[i]["game"]["id"] 
playerlog[x-1]["player"]["game" + gameID] = dataedit[i]["game"] 
playerlog[x-1]["player"]["game" + gameID]["stats"] = dataedit[i]["stats"] 
playerlog[x-1]["player"]["game" + gameID]["team"] = dataedit[i]["team"] 

Da ich noch lerne, ich würde gerne Feedback/Kommentare zu bekommen, wie zu verbessern.

0

Anstatt Ihre Transformationslogik in Python-Code zu kodieren, empfehle ich, MongoDB zu überprüfen. Es ist eine JSON-basierte Dokumentendatenbank und Sie können solche Abfragen damit erstellen.

Hier ist ein sehr einfaches Beispiel: https://docs.mongodb.com/manual/aggregation/

Ihre Daten komplexer sind, aber Spieler ist ähnlich cust_id und Spiel im Beispiel betragen.

+0

danke für die Antwort und Info! Ich versuche, in die Mongodb-Richtung zu gehen. Ich möchte schließlich die api-Daten in mongoDB speichern. Ich habe versucht, die Daten vor dem Hinzufügen zu mongoDB zu bereinigen. Ist es besser, die rohe Ausgabe nur in MongoDB zu speichern und dann die Daten mithilfe von Abfragen zu bereinigen? – Maarten

+0

Wenn Sie MongoDB trotzdem verwenden möchten, warum nicht verwenden? Es ist einfacher, ein vorhandenes Werkzeug zu verwenden, als es neu zu erfinden. Ich würde eine MongoDB-Sammlung erstellen und die Elemente in Ihrer "Gamelogs" -Liste als separate Dokumente speichern. – fcs

Verwandte Themen