2016-08-09 90 views
0

Ich weiß, dass diese Anfrage ein bisschen schwer ist. Ich bin mir nicht sicher, ob jemand helfen kann, aber wenn es so wäre, würde ich es begrüßen.Python mehrere JSON-Anfragen zu einer einzigen Datei zusammenführen und speichern

Ich versuche mit XML-Daten in Python zu arbeiten, was neu für mich ist. Ich versuche, ein Skript zu schreiben, das mehrere JSON-Anfragen analysiert und zu einem zusammenfügt. Ich möchte diese Datei jedes Mal in ein proprietäres System einspeisen, um alle Daten an einem einzigen Ort auf dem neuesten Stand zu halten.

  { 
       "items": [{ 
        "id": 333512, 
        "full_name": "Flooring", 
        "instock": true, 
        "dept": "none", 
        "stockid": 4708384, 
        "commonname": "StdFloor", 
        "reorder": true 
       }, { 
        "id": 3336532, 
        "full_name": "Standard Tool", 
        "instock": true, 
        "dept": "none", 
        "stockid": 4708383, 
        "commonname": "StandardTool", 
        "reorder": true 
       }] 
      } 

200+ von ihnen werden in der ursprünglichen Anfrage zurückkommen

zuerst werde ich die IDs von jedem greifen müssen und eine separate Anfrage laufen, um weitere Details zu den einzelnen Einzelteile zu erhalten. Ich weiß, wie man die Anfragen ausführt, aber wie mache ich ein Array nur mit den IDs?

Sobald ich jede dieser Anfragen ausgeführt habe, bekomme ich 5-6 Rechnungsdetails pro Artikel zurück. So zum Beispiel, diese gehören alle Artikel ID 333512 in der ursprünglichen Antwort

    { 
       "invoices": [{ 
        "invoice_id": 10015, 
        "cusbillable": true, 
        "inventoried": false, 
        "totals": 2.0, 
        "totalswh": 0.0, 
        "title": "EarlyOrder", 
        "invoicerate": 0.0, 
        "invoicedamt": 0.0, 
        "stockcost": 0.0, 
        "remainingbudg": null 
       }, { 
        "invoice_id": 10016, 
        "title": "EarlyOrder", 
        "cusbillable": true, 
        "inventoried": false, 
        "totals": 2.0, 
        "totalswh": 0.0, 
        "invoicerate": 0.0, 
        "invoicedamt": 0.0, 
        "stockcost": 0.0, 
        "remainingbudg": null 
       }] 
      } 

Diese Rechnungen haben nicht die Artikel-ID in ihnen aber so, wenn ich sie wieder mit der ID in der URL möchte ich Fügen Sie sie der ursprünglichen Elementliste als Sub-Array von Element-IDs hinzu, als wären sie mit der ursprünglichen Anforderung zurückgekommen. Jeder Artikel wird dann seine Rechnungen erhalten. Ich nehme an, dass es am besten ist, alle Anfragen nacheinander auszuführen und ein Array mit der ID als Namen jedes Mitglieds zu erstellen.

so etwas wie das ist zum Beispiel, was ich möchte mit so etwas enden (aber richtig formatiert).

  [{ 
        "items": [{ 
         "id": 333512, 
         "full_name": "Flooring", 
         "instock": true, 
         "dept": "none", 
         "stockid": 4708384, 
         "commonname": "StdFloor", 
         "reorder": true" 
          { 
          "invoices": [{ 
            "invoice_id": 10015, 
            "cusbillable": true, 
            "inventoried": false, 
            "totals": 2.0, 
            "totalswh": 0.0, 
            "title": "EarlyOrder", 
            "invoicerate": 0.0, 
            "invoicedamt": 0.0, 
            "stockcost": 0.0, 
            "remainingbudg": null 
           }, 
           { 
            "invoice_id": 10016, 
            "title": "EarlyOrder", 
            "cusbillable": true, 
            "inventoried": false, 
            "totals": 2.0, 
            "totalswh": 0.0, 
            "invoicerate": 0.0, 
            "invoicedamt": 0.0, 
            "stockcost": 0.0, 
            "remainingbudg": null 
           }], 
          } 
         }], 
         { 
         "id": 3336532, 
         "full_name": "Standard Tool", 
         "instock": true, 
         "dept": "none", 
         "stockid": 4708383, 
         "commonname": "StandardTool", 
         "reorder": true" 
          { 
          "invoices": [{ 
            "invoice_id": 10015, 
            "cusbillable": true, 
            "inventoried": false, 
            "totals": 2.0, 
            "totalswh": 0.0, 
            "title": "EarlyOrder", 
            "invoicerate": 0.0, 
            "invoicedamt": 0.0, 
            "stockcost": 0.0, 
            "remainingbudg": null 
           }, 
           { 
            "invoice_id": 10016, 
            "title": "EarlyOrder", 
            "cusbillable": true, 
            "inventoried": false, 
            "totals": 2.0, 
            "totalswh": 0.0, 
            "invoicerate": 0.0, 
            "invoicedamt": 0.0, 
            "stockcost": 0.0, 
            "remainingbudg": null 
           }], 
          } 
      }] 
+0

also was hast du bisher probiert und funktioniert nicht? – Anzel

Antwort

0

Principe Antwort darüber, wie Produkte und Rechnungen Daten in einem einzigen Wörterbuch zu kompilieren:

# The container for compiled items/invoices 
items = {} 

# Process an items request 
for data in jsondata["items"]: 
    items[data["id"]] = data 
    items[data["id"]]["invoices"] = {} 

# Process an invoices request 
id = # Your way to get the associated id 
items[id]["invoices"] = jsondata["invoices"] 

hoffen, dass es hilft Ihnen.