Запись в многоуровневый JSON с использованием xlrd - PullRequest
1 голос
/ 09 июля 2020

У меня проблемы с получением моего JSON вывода в точности так, как должно быть. Я пытаюсь проанализировать файл Excel, используя python, для создания вывода JSON. Это для крупномасштабного проекта, над которым я работаю сейчас, и он значительно ускорит процесс. Я ценю любой ввод :).

Это мой желаемый результат:

    "classes": [
    {
        "name": "Defend Class 2",
        "cohort": 1,
        "root_folder": "DF-L2-C1",
        "template_prefix": "template.",
        "vm_prefix":"student-",
        "resource_pool":"S1-DC-LMS2CL-001",
        "pods": 22,
        "vds": "S1-DC-LMS2DVS-001",
        "portgroup_base": "LAB-PS-DEF-",
        "vlans": {
            "required": 4,
            "start": 1500,
            "end": 1587,
            "rcn_start": 1303
            },
  

Однако это то, что я сейчас получаю: борется с идентифицированной частью "вланов". Ниже приведен код, который у меня есть:

import xlrd
from collections import OrderedDict
import simplejson as json

wb = xlrd.open_workbook('test.xlsx')
classes = wb.sheet_by_index(0)

vms_list = []

for rownum in range(1, classes.nrows):
    vms = OrderedDict()
    row_values = classes.row_values(rownum)
    vms['name'] = row_values[0]
    vms['cohort'] = int(row_values[1])
    vms['root_folder'] = row_values[2]
    vms['template_prefix'] = row_values[3]
    vms['vm_prefix'] = row_values[4]
    vms['resource_pool'] = row_values[5]
    vms['pods'] = int(row_values[6])
    vms['vds'] = row_values[7]
    vms['portgroup_base'] = row_values[8]
    vlan_list = []
    for rownum in range(1, classes.nrows):
        vlan = OrderedDict()
        row_values = classes.row_values(rownum)
        vlan['required'] = int(row_values[9])
        vlan['start'] = int(row_values[10])
        vlan['end'] = int(row_values[11])
        vlan['rcn_start'] = int(row_values[12])
        vlan_list.append(vlan)

    vlan_list = {'vlans': vlan_list}
    vms_list.append(vms)

vms_list = {'classes' : vms_list}

j = json.dumps(vms_list, indent=4)

with open('data.json', 'w') as f:
    f.write(j)

Есть идеи? Спасибо!

...