在Python中将Json文件嵌套的DICT列表转换为DICT行

在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

我有一个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], 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'}