通过合并空白主字典中的字典,在 Python 中创建具有特定结构的 JSON

Posted

技术标签:

【中文标题】通过合并空白主字典中的字典,在 Python 中创建具有特定结构的 JSON【英文标题】:Create JSON having a specific structure in Python by merging dictionaries in a blank master dictionary 【发布时间】:2021-08-11 22:23:46 【问题描述】:

所以,我有从 html 表单获取的 JSON 数据。我必须将此数据格式化为具有如下所示的特定 JSON 结构。

[
 
   "Header": "Stats",
   "Line_01": "Line 01",
   "Line_02": "Line 02",
   "Line_03": "Line 03",
   "Line_04": "Line 04",
   "Line_05": "Line 05",
   "Line_06": "Line 06",
   "Line_07": "Line 07"
 ,
 
   "Header": "JUV",
   "Line_01": "89",
   "Line_02": "34",
   "Line_03": "765",
   "Line_04": "123",
   "Line_05": "1",
   "Line_06": "4",
   "Line_07": "455"
 ,
 
   "Header": "SMP",
   "Line_01": "12",
   "Line_02": "89",
   "Line_03": "124",
   "Line_04": "678",
   "Line_05": "92",
   "Line_06": "120",
   "Line_07": "5"
 
]

我从 HTML 表单中得到的 JSON 是:

[
    
        "name": "00",
        "value": "JUV"
    ,
    
        "name": "00",
        "value": "STATS"
    ,
    
        "name": "00",
        "value": "SMP"
    ,
    
        "name": "00",
        "value": "89"
    ,
    
        "name": "01",
        "value": "LINE 01"
    ,
    
        "name": "02",
        "value": "12"
    ,
    
        "name": "03",
        "value": "34"
    ,
    
        "name": "04",
        "value": "LINE 02"
    ,
    
        "name": "05",
        "value": "89"
    ,
    
        "name": "06",
        "value": "765"
    ,
    
        "name": "07",
        "value": "LINE 03"
    ,
    
        "name": "08",
        "value": "124"
    ,
    
        "name": "09",
        "value": "123"
    ,
    
        "name": "10",
        "value": "LINE 04"
    ,
    
        "name": "11",
        "value": "678"
    ,
    
        "name": "12",
        "value": "1"
    ,
    
        "name": "13",
        "value": "LINE 05"
    ,
    
        "name": "14",
        "value": "92"
    ,
    
        "name": "15",
        "value": "4"
    ,
    
        "name": "16",
        "value": "LINE 06"
    ,
    
        "name": "17",
        "value": "120"
    ,
    
        "name": "18",
        "value": "455"
    ,
    
        "name": "19",
        "value": "LINE 07"
    ,
    
        "name": "20",
        "value": "5"
    
]

表单如下所示:HTML 表单 - 粘贴板上的图像

目前我正在尝试的 Python 代码是:

import json

jarr = []
final_file = 
json_template = 
   "Header": "",
   "Line_01": "",
   "Line_02": "",
   "Line_03": "",
   "Line_04": "",
   "Line_05": "",
   "Line_06": "",
   "Line_07": ""
 

with open("testo101.json",) as f:
    jdata = json.load(f)

k = 0

for i in range(8):         
    a =[]
    for j in range(3):     
         a.append(jdata[k]['value'])
         k+=1
    jarr.append(a)

for i, x in enumerate(json_template):
    json_template[x]=jarr[i][1]
final_file.update(json_template)
for i, x in enumerate(json_template):
    json_template[x]=jarr[i][0]
final_file.update(json_template)
for i, x in enumerate(json_template):
    json_template[x]=jarr[i][2]     
final_file.update(json_template)

print(final_file)

所以到目前为止我所做的是:

导入我从 HTML 表单获得的 JSON 文件。 将其转换为 3x8 矩阵...这样我就可以获得每列的值 很容易。 我可以使用 json_template 字典中的 JSON 填充值 我刚刚创建的二维数组的帮助。

问题:

我不知道如何将我从二维数组的每一列生成的 3 个字典合并到一个字典 final_file 中,这样我就可以将它作为 JSON 文件转储,这就是我想要的。我该怎么做...或者如果有其他更好的方法可以做到这一点,请帮忙。

谢谢。

【问题讨论】:

【参考方案1】:

这些代码应该可以完成这项工作:

import json

jarr = []
final_file = [] # CHANGE #1
json_template = 
   "Header": "",
   "Line_01": "",
   "Line_02": "",
   "Line_03": "",
   "Line_04": "",
   "Line_05": "",
   "Line_06": "",
   "Line_07": ""
 

with open("testo101.json",) as f:
    jdata = json.load(f)

k = 0

for i in range(8):         
    a =[]
    for j in range(3):     
         a.append(jdata[k]['value'])
         k+=1
    jarr.append(a)

for i, x in enumerate(json_template):
    json_template[x]=jarr[i][1]
final_file.append(json_template.copy()) # CHANGE #2
for i, x in enumerate(json_template):
    json_template[x]=jarr[i][0]
final_file.append(json_template.copy()) # CHANGE #2
for i, x in enumerate(json_template):
    json_template[x]=jarr[i][2]     
final_file.append(json_template.copy()) # CHANGE #2


with open('yourjson.json', 'w') as jsonfile:
    json.dump(final_file, jsonfile, indent=4)

我对您的代码做了两处更改:

    您需要一个字典列表,而不仅仅是一个字典来转储三个字典,所以我将 final_file 更改为一个列表。 制作完每个 json_template 后,我将 模板的副本 附加到列表中。 (.copy() 很重要,否则以后的更改将反映在以前的条目中,您最终会得到三个相同的项目。

我写了转储代码并附在最后。你可以打开yourjson.json查看结果。

【讨论】:

以上是关于通过合并空白主字典中的字典,在 Python 中创建具有特定结构的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 Python 中创建嵌套字典?

python multiprocessing:如何从子进程修改在主进程中创建的字典?

字典理解中的字典合并

python字典合并

python - 如何在更改python中的值时合并一个嵌套字典和一个简单字典?

在python中循环遍历数据框字典并将字典中的每个数据框与单个数据框合并