python - 在 Python 中形成 Json 模型的问题

标签 python json python-3.x

我想将 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)

最佳答案

您可以使用:

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'}]}]}

关于python - 在 Python 中形成 Json 模型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543511/

相关文章:

python - 比较不同大小的 numpy 数组

javascript - 在纯 JavaScript 中打包/解包通用二进制 JSON

java - jackson 反序列化不在自定义反序列化器上调用反序列化

python - 打印给定列表中的偶数

python - 使用 pandas DataFrame 写入数据时出现无属性 "append"错误

ios - 获取 JSON 数据时显示事件指示器

python - 如何循环嵌套字典列表并带来 k :v pairs to 1st-level dictionary? JSON 数据

python - PYQT如何编辑在MainWindow中tab化的QDockWidget的标题?

python-3.x - 将 .sav 文件转换为 Pandas 数据框

python - 更新 pandas groupby().last() 的列值