Проблема с формированием модели Json в Python

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

Ввод JSON

{
  "id": "one",
  "type": "db",
  "tasks" : {
    "process1" : ["j1", "j2"],
    "process2" : ["j4"]
  }
}

Ожидаемый результат:

{
    "model": [
        {
            "data": [
                {
                    "columnName": "tasks",
                    "columnValue": "j1"
                },
                {
                    "columnName": "process_name",
                    "columnValue": "process1"
                }
            ]
        },
        {
            "data": [
                {
                    "columnName": "tasks",
                    "columnValue": "j2"
                },
                {
                    "columnName": "process_name",
                    "columnValue": "process1"
                }
            ]
        },
        {
            "data": [
                {
                    "columnName": "tasks",
                    "columnValue": "j4"
                },
                {
                    "columnName": "process_name",
                    "columnValue": "process2"
                }
            ]
        }
    ]
}

Я пробовал с приведенным ниже кодом, но это не помогает мне.

wanted_keys = ['tasks'] # The keys you want
    task = dict((k, data[k]) for k in wanted_keys if k in data)
    #print(type(task.items()))
    ne = {}
    for key, value in task.items():
        ne = dict(value)
    #print(ne)

    jobModel = []
    tableData = []
    for key, value in ne.items():
        #print(key)
        for i in value:

            #print(i)
            tableData.append({'columnName': 'job_name', 'columnValue': i})
            tableData.append({'columnName': 'jobplan_name', 'columnValue': key})
            jobModel.append(tableData)

    #print(tableData)
    print(jobModel)

1 ответ

Решение

Вы можете использовать:

from pprint import pprint
data = {
  "id": "one",
  "type": "db",
  "tasks" : {
    "process1" : ["j1", "j2"],
    "process2" : ["j4"]
  }
}

tasks_data = data['tasks']
new_data = []

for process, tasks in tasks_data.items():
    for task in tasks:
        new_data.append({'data': [
            {'columnName': 'tasks', 'columnValue': task},
            {'columnName': 'process_name', 'columnValue': process}]})

output =  {'model': new_data}

pprint(output)

выход:

{'model': [{'data': [{'columnName': 'tasks', 'columnValue': 'j1'},
                     {'columnName': 'process_name',
                      'columnValue': 'process1'}]},
           {'data': [{'columnName': 'tasks', 'columnValue': 'j2'},
                     {'columnName': 'process_name',
                      'columnValue': 'process1'}]},
           {'data': [{'columnName': 'tasks', 'columnValue': 'j4'},
                     {'columnName': 'process_name',
                      'columnValue': 'process2'}]}]}
Другие вопросы по тегам