通过合并空白主字典中的字典,在 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 multiprocessing:如何从子进程修改在主进程中创建的字典?