Wie ein Array zu löschen und die Werte in einer for-Schleife zurückgesetzt, während eine Zeichenkette Json Gebäude?

stimmen
0

Ich Schleife durch jede Zeile in einem Excel-Sheet des openpyxl Import verwendet, um schließlich eine große Json Zeichenkette aufbauen, die i an einem API einspeisen kann.

Ich Looping jede Zeile durch und meine Json Struktur Aufbau aus, muß ich durch „||“ und dann für jeden Wert einen Zellwert teilen Sie es als verschachtelten Array in einem json Abschnitt hinzugefügt werden muss. Ich bin derzeit mit dem folgenden Code und mein Problem ist, dass ich in meinem for-Schleife meiner Liste Objekt erstellen und die json Brocken zu einem größeren Array anhängen und es hält während jeder Schleife meiner Liste Werte angehängt wird. So habe ich die .Clear () -Methode auf der Liste nach jeder Schleife zu löschen ... aber dann, wenn ich meine endgültige Ausgabe kompilieren meiner Liste ist leer. Es ist wie es behält nicht seine Werte, wenn es in die Liste jede Schleife hinzugefügt wird. Ich bin neu in Python und gab ihm einen guten Wirbel. Irgendwelche Vorschläge in die richtige Richtung wäre sehr hilfreich. Es ist fast wie jede Schleife seine eigene einzigartige Array braucht zu verwenden und die Werte zu halten. Der Tags Abschnitt des Json in der letzten Ausgabe für jede json Linie geleert ... wenn es die Werte für jede einzelne Iteration darin haben sollte.

My Data Set (ich habe 3 Zeilen in Excel). Sie können sehen, dass i-Werte haben, dass ich in der 7. Spalte geteilt werden soll. Das ist die Spalte i die Werte zu teilen sind Schleifen, wie sie in meinem json verschachtelt werden.

Reihe 1 (Zellen) = ABC, Testing, Testing Wieder, Datum, DATUM Leer A || B || C.

Reihe 2 (Zellen) = ABC 2, Testing 2, Testing Wieder 2, Datum, DATUM Leer X || Y || Z.

Reihe 3 (Zellen) = ABC 3, Testing 3, Testing Wieder 3, Datum, DATUM, Leerer.

Mein-Code.

#from openpyxl import Workbook
import json
from openpyxl import load_workbook

output_table = input_table.copy()

var_path_excel_file = flow_variables['Location']

workbook = load_workbook(filename=var_path_excel_file)
sheet = workbook.active

#create a null value to be used
emptyString = Null

#list out all of the sections of the json that we want to print out - these are based on the inputs
jsonFull = []
jsondata = {}
tags = []

for value in sheet.iter_rows(min_row=2,min_col=0,max_col=40,values_only=True):  

    #I add my split values to an array so that way when i add the array to the json it will have the proper brackets i need for the API to run correctly
    if value[6] is not None:
        data = value[6].split( || )
        for temp in data:           
            tags.append(temp)           

    #I build out the json structure here that will be added for each excel row basically
    jsondata = {
        name: value[0],
        short_description: value[1],
        long_description: value[2],
        effective_start_date: value[3],
        effective_end_date: value[4],
        workflow_state: emptyString,              
        tags: tags
        }

    #Add the jsondata row to the larger collection
    jsonFull.append(jsondata)   
    tags.clear()

print(json.dumps(jsonFull))

Und dann würde mein gewünschtes Ergebnis so etwas wie diese. Ich brauche nur, um herauszufinden, die richtige Syntax für die Liste Handhabung ... und kann nicht scheinen, um ein Beispiel zu Basis zu finden, aus dem.

[
    {
        name: ABC, 
        short_description: Testing, 
        long_description: Testing Again, 
        effective_start_date: 2020-03-04T14:45:22Z, 
        effective_end_date: 2020-03-04T14:45:22Z, 
        workflow_state: Null, 
        tags: [
            A,
            B,
            C
        ]
    }, 
    {
        name: ABC 2, 
        short_description: Testing 2, 
        long_description: Testing Again 2, 
        effective_start_date: 2020-03-04T14:45:22Z, 
        effective_end_date: 2020-03-04T14:45:22Z, 
        workflow_state: Null, 
        tags: [
            X,
            Y,
            Z
        ]
    }, 
    {
        name: ABC 3, 
        short_description: Testing 3, 
        long_description: Testing Again 3, 
        effective_start_date: 2020-03-04T14:45:22Z, 
        effective_end_date: 2020-03-04T14:45:22Z, 
        workflow_state: Null, 
        tags: [           
        ]
    }
]
Veröffentlicht am 19/03/2020 um 21:54
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Sie machen keine Kopie , tagswenn Sie es in das Wörterbuch oder Anruf setzen tags.clear(), Sie nur einen Verweis auf die gleiche Liste setzen. Sie müssen eine neue Liste am Anfang jeder Schleife Iteration erstellen, nicht die gleiche Liste wiederverwenden.

for value in sheet.iter_rows(min_row=2,min_col=0,max_col=40,values_only=True):  

    #I add my split values to an array so that way when i add the array to the json it will have the proper brackets i need for the API to run correctly
    if value[6] is not None:
        tags = value[6].split(" || ")
    else:
        tags = []         

    #I build out the json structure here that will be added for each excel row basically
    jsondata = {
        "name": value[0],
        "short_description": value[1],
        "long_description": value[2],
        "effective_start_date": value[3],
        "effective_end_date": value[4],
        "workflow_state": emptyString,              
        "tags": tags
        }

    #Add the jsondata row to the larger collection
    jsonFull.append(jsondata) 
Beantwortet am 19/03/2020 um 21:59
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more