使用Python将JSON嵌套为扁平JSON

使用Python将JSON嵌套为扁平JSON,python,json,python-3.x,Python,Json,Python 3.x,我的JSON文件如下所示- sample4 = { "a": 1, "b": 2, "c": 3, "d": [{"a": 5, "b": 6}, {"a": 7, "b": 8}], "e": [{"a": 1}, {"a": 2}], "f": 9, "g": [{"a": 5, "b": 6}, {"a": 7, "b": 8}] } 我用来展平JSON的代码是-

我的JSON文件如下所示-

sample4 = {
        "a": 1,
        "b": 2, 
        "c": 3,
        "d": [{"a": 5, "b": 6}, {"a": 7, "b": 8}],
        "e": [{"a": 1}, {"a": 2}],
        "f": 9,
        "g": [{"a": 5, "b": 6}, {"a": 7, "b": 8}]
    }

我用来展平JSON的代码是-

def扁平化(y):
out={}
定义编号(x,名称=“”):
out[name[:-1]]=x
def展平(x,名称=“”):
如果类型(x)为dict:
对于x中的a:
如果a==“MetaDataList”:
无符号(x[a],名称+a+')
其他:
展平(x[a],名称+a+''.')
elif类型(x)为列表:
i=0
对于x中的a:
展平(a、名称)
i+=1
其他:
out[name[:-1]]=x
展平(y)
返回
这是我得到的输出-

但我正在寻找这个输出-


要实现这一点,首先需要计算需要执行的步骤

请测试它,因为这是一项非常复杂的任务,我不能100%确定它是否符合您的需要

sample4={
“a”:1,
“b”:2,
“c”:3,
“d”:[{“a”:5,“b”:6},{“a”:7,“b”:8}],
“e”:[{“a”:1},{“a”:2}],
“f”:9,
“g”:[{“a”:5,“b”:6},{“a”:7,“b”:8}]
}
def计数步骤(字典):
“”“从字典中最长的列表中计算所需的步骤”“”
返回max((len(value)表示dictionary.values()中的值,如果是instance(value,list)))
def扁平化(字典,名称=“”):
步骤=计数步骤(字典)
return_out=[]
对于步长范围(0,步长):
out={}
对于键,dictionary.items()中的值:
如果isinstance(值,列表):
对于键\u inner,值[step]中的值\u inner。项()
组合键=键+键+内键
如果组合_键未输入输出:
输出[组合键]=[]
out[组合键]=值
其他:
out[键]=值
return\u out.append(out)
返回
打印(展平(样本4))
#[
#{'a':1,'b':2,'c':3,'d_'a':5,'d_'b':6,'e_'a':1,'f':9,'g_'a':5,'g_'b':6},
#{'a':1,'b':2,'c':3,'d_'a':7,'d_'b':8,'e_'a':2,'f':9,'g_'a':7,'g_'b':8}
#]

请试着解释一下代码应该做什么。sample4的键可以是“MetaDataList”吗?flatte的输出应该是什么样的?代码接受嵌套的JSON文件,输出应该是flatte JSON文件。FlattenJSON的输出应该像-{“a”:1,“b”:2,“c”:3,“d_a”:5,“d_b”:6,“e_a”:1,“f”:9,“g_a”:5,“g_b”:6},{“a”:1,“b”:2,“c”:3,“d_a”:7,“d_b”:8,“e_a”:2,“f”:9,“g_a”:7,“g_b”:8}这是无效的JSON。外部的
{}
应该是
[]
,即列表吗?它应该是[]。很抱歉