python中的json到字典

python中的json到字典,python,json,python-3.x,Python,Json,Python 3.x,这是我的json文件输入 {"Report":{"id":101,"type":"typeA","Replist":[{"rptid":"r001","subrpt":{"subid":74,"subname":"name1","subval":113},&q

这是我的json文件输入

{"Report":{"id":101,"type":"typeA","Replist":[{"rptid":"r001","subrpt":{"subid":74,"subname":"name1","subval":113},"RelsubList":[{"Relid":8,"Relsubdetails":{"Rel_subname":"name8","Rel_Subval":65}},{"Relid":5,"Relsubdetails":{"Rel_subname":"name5","Rel_Subval":40}}],"fldA":30,"fldB":23}]}}
...
我正在编写python程序,将输入转换为字典中的以下格式。 我是python新手

预期产出:

out: {"id": "101", "type": "typeA", "rptid": "r001", "subrpt_subid": "74", "subrpt_subname": "name1", "subrpt_subval":"113","Relid":"8","Rel_subname":"name8","Rel_Subval":"65","Relid":"5","Rel_subname":"name5","Rel_Subval":"40","fldA":"30","fldB":"23"
我使用以下逻辑将输出转换为subrpt

电流输出: 输出:{'id':'101','type':'typeA','rptid':'r001','subrpt_subid':'74','subrpt_subname':'name1','subrpt_subval':'113'}

但是我正在努力获取RelsubList的逻辑(看起来它既有list又有dictionary[{}])。 请帮我得到同样的逻辑

import json
list1 = []
dict1 = {}
dict2 = {}
 
data_file = "samp1.json"
file = open(data_file)
for line in file:
    json_line = json.loads(line)
    json_line = json_line["Report"]
    dict1["id"]=str(json_line["id"])
    dict1["type"] = str(json_line["type"])
    json_line = json_line["Replist"]
    dict1["rptid"]= str(json_line[0]["rptid"])
    dict1["subrpt_subid"] = str(json_line[0]["subrpt"]["subid"])
    dict1["subrpt_subname"] = str(json_line[0]["subrpt"]["subname"])
    dict1["subrpt_subval"] = str(json_line[0]["subrpt"]["subval"])
    print("out:", dict1)

您的一些逻辑让我感到困惑,例如,为什么要在每个循环中执行json.loads(line)

无论如何,下面应该为您提供RealsubList的逻辑:

import json

f = open("data.json")

data = json.load(f)

 
for line in data:
    relsublist = data["Report"]["Replist"][0]["RelsubList"]
    
print(relsublist)
结果:

[{'Relid': 8, 'Relsubdetails': {'Rel_subname': 'name8', 'Rel_Subval': 65}}, {'Relid': 5, 'Relsubdetails': {'Rel_subname': 'name5', 'Rel_Subval': 40}}]
[“Replist”]后面的[0]索引的原因是Replist包含嵌套字典数组,因此需要按索引调用它。在这种情况下,它只是一个数组,因此它将是0

您的“预期输出”具有重复的键(
Relid
Rel\u subname
Rel\u subvalue
),这在
dict
中是不可能的。