在Python中将Json文件嵌套的DICT列表转换为DICT行
我有一个json文件,需要将DICT列表转换为多行DICT 示例o代码: 理想输出: 我试图压平json,但一行结果难以辨认在Python中将Json文件嵌套的DICT列表转换为DICT行,python,json,list,nested,Python,Json,List,Nested,我有一个json文件,需要将DICT列表转换为多行DICT 示例o代码: 理想输出: 我试图压平json,但一行结果难以辨认 def flatten_json(nested_json): try: out = {} def flatten(x, name=''): if type(x) is dict: for a in x: flatten(x[a], nam
def flatten_json(nested_json):
try:
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + '_')
elif type(x) is list:
i = 0
while i > 0:
for a in x:
flatten(a, name + str(i) + '_')
i += 1
else:
out[name[:-1]] = x
下面是使用递归实现所需输出的另一种尝试。请记住,下面的代码是根据您提供的示例数据生成的:
import json
def flatten(data,outList,resultData):
for key, value in data.items():
if isinstance(value, dict):
outList.append(key)
flatten(value,outList,resultData)
elif isinstance(value, list):
outList.append(key)
for elem in value:
for inner_key, inner_value in elem.items():
outList.append(inner_key)
final_key = '_'.join(outList)
resultData.append({final_key : inner_value})
outList = outList[:-1]
return resultData
def showData(resultData):
for elem in resultData:
print(elem)
with open('data.json') as inFile:
data = json.loads(inFile.read())
resultData = flatten(data,[],[])
showData(resultData)
输出将是:
{'A_B_C_1': 'value_x'}
{'A_B_C_2': 'value_x'}
{'A_B_C_3': 'value_x'}
{'A_B_C_1': 'value_y'}
{'A_B_C_2': 'value_y'}
{'A_B_C_3': 'value_y'}
您的输入和预期输出不是有效的JSON。键不带引号,{[1,2,3]}仅在Python中作为集合中的列表有效,而集合在JSON中不是有效的数据类型,{c0:1,2,3}是什么?理想的输出在JSON或Python中都不是有效的数据结构。请重新阅读您的问题并更新所需的输出。正如@blhsing所指出的,输入也是无效的——这就是您想要处理的吗?你确定你的代码中应该接受无效的JSON吗?这是你数据的有效JSON:{a:{b:{c0:[1,2,3],c1:[1,2,3],c2:[1,2,3]}}}}}你想要的结果是一种有效的格式你确定你在寻找类似的东西吗是的,你是对的,原始输入对键和值有双引号,我写的概念不是真实的案例。很抱歉
import json
def flatten(data,outList,resultData):
for key, value in data.items():
if isinstance(value, dict):
outList.append(key)
flatten(value,outList,resultData)
elif isinstance(value, list):
outList.append(key)
for elem in value:
for inner_key, inner_value in elem.items():
outList.append(inner_key)
final_key = '_'.join(outList)
resultData.append({final_key : inner_value})
outList = outList[:-1]
return resultData
def showData(resultData):
for elem in resultData:
print(elem)
with open('data.json') as inFile:
data = json.loads(inFile.read())
resultData = flatten(data,[],[])
showData(resultData)
{'A_B_C_1': 'value_x'}
{'A_B_C_2': 'value_x'}
{'A_B_C_3': 'value_x'}
{'A_B_C_1': 'value_y'}
{'A_B_C_2': 'value_y'}
{'A_B_C_3': 'value_y'}