Как очистить массив и сбросить значения в цикле при построении строки JSON?

голоса
0

Я цикл по каждой строке в листе первенствовать используя openpyxl импорт в конечном счете построить большой JSON строку, я могу кормить к API.

Я пробегаем по каждой строке и строить мою структуру JSon, мне нужно разделить значение ячейки с помощью «||», а затем для каждого значения он должен быть добавлен в качестве вложенного массива внутри секций JSon. Я в настоящее время я использую следующий код и моя проблема заключается в том, что я строй моего списка объектов по моему для цикла и добавьте JSon кусок на больший массив и сохраняет свои добавления списка значений во время каждого цикла. Таким образом, я использовал метод .clear () в списке, чтобы очистить его после каждого цикла ... но потом, когда я скомпилировать мой окончательный вывод мой список пуст. Его нравится не поддерживать его значение при добавлении в список каждый цикла. Я новичок в Python и дал ему хороший шанс. Любые предложения в правильном направлении будут оценены. Его почти как каждый цикл нуждается в своем собственном уникальный массиве, чтобы использовать и сохранять значение. Теги часть Json опорожняется в конечной продукции для каждой JSon линии ... когда она должна иметь значения для каждой уникальной итерации в нем.

Мои данные Set (у меня есть 3 строки в Excel). Вы можете видеть, что у меня есть ценности, которые я хочу разделить на 7-й колонке. То есть колонка я циклический разделить значения, как они будут вложены в моей JSON.

Ряд 1 (клетки) = ABC, Проверка, Испытание Снова, Дата, Дата, пусто, А || В || С.

Строка 2 (клетка) = ABC 2, Проверка 2, Тестирование Опять 2, ДАТА, ДАТА, Пустой, X || Y || Z.

Строка 3 (ячейки) = ABC 3, Испытание 3, Тестирование Опять 3, ДАТА, ДАТА, пустой, пустой.

Мой код.

#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))

И тогда мой желаемый результат будет что-то вроде этого. Мне просто нужно, чтобы выяснить правильный синтаксис для обработки списка ... и не могу найти пример к базе офф.

[
    {
        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: [           
        ]
    }
]
Задан 19/03/2020 в 23:54
источник пользователем
На других языках...                            


1 ответов

голоса
0

Вы не сделать копию , tagsкогда вы поместите его в словарь или вызов tags.clear(), вы просто положить ссылку на тот же список. Вам нужно создать новый список в начале каждой итерации цикла, не использовать тот же список.

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) 
Ответил 19/03/2020 в 23:59
источник пользователем

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