Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python正确解析多个键相等的嵌套json_Json_Python 3.x_Pandas_Normalization_Flatten - Fatal编程技术网

如何使用Python正确解析多个键相等的嵌套json

如何使用Python正确解析多个键相等的嵌套json,json,python-3.x,pandas,normalization,flatten,Json,Python 3.x,Pandas,Normalization,Flatten,我对flatte/json\u规范化函数有问题。其中有一个嵌套的json,其中有6个“收据”,但展平这个json只会给我1行和1个收据,这也是最后一行,我需要所有6个数据帧 [ { “_索引”:“数据包-2020-02-03”, “\u类型”:“收据\u文件”, “_分数”:空, “_来源”:{ “层”:{ “框架”:{ “框架包装类型”:“25”, “帧时间”:“2019年2月3日00:17:14.004011000 MSK”, “帧偏移量_移位”:“0.000000000”, “帧时间”——

我对
flatte
/
json\u规范化
函数有问题。其中有一个嵌套的json,其中有6个“收据”,但展平这个json只会给我1行和1个收据,这也是最后一行,我需要所有6个数据帧

[
{
“_索引”:“数据包-2020-02-03”,
“\u类型”:“收据\u文件”,
“_分数”:空,
“_来源”:{
“层”:{
“框架”:{
“框架包装类型”:“25”,
“帧时间”:“2019年2月3日00:17:14.004011000 MSK”,
“帧偏移量_移位”:“0.000000000”,
“帧时间”——“2575325034.004011000”,
“帧时间增量”:“0.002843000”,
“帧时间增量显示”:“0.002843000”,
“相对帧时间”:“0.002852000”,
“帧编号”:“4”,
“frame.len”:“1294”,
“框架盖面”:“1294”,
“已标记帧”:“0”,
“frame.ignored”:“0”,
“帧协议”:“多个”
},
“收据”:{
“收据.命令长度”:“238”,
“receives.command_id”:“0x00000005”,
“收据序列号”:“47207”,
“收据.数据\u编码”:“0x00000000”,
“收据.数据编码树”:{
“receives.rps”:“0x00000000”,
“收据类型1数据编码”:{
“receipts.rps.rc_coding_group”:“0x00000000”,
“receives.rps.text_compression”:“0”,
“收据.rps.class_当前”:“0”,
“receives.rps.charset”:“0x00000000”
},
“收据类型2数据编码”:{
“receipts.rps.rpk.编码组”:“0x00000000”,
“receipts.rps.rpk.\u语言”:“0x00000000”
}
},
“收据.rc\u默认收据\u id:“0”,
“收据.rc_长度”:“117”,
“收据.收据”:“29831”,
“收据.选项参数”:{
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003002”,
“收据.选择参数”:“10”,
“收据。供应商_op:”47912“
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003001”,
“收据.选择参数”:“10”,
“收据.供应商操作”:“98982”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003004”,
“收据.选择参数”:“1”,
“收据。供应商_op”:“00”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003000”,
“收据.选择参数”:“4”,
“收据.供应商操作”:“23080”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003003”,
“收据.选择参数”:“10”,
“收据.供应商操作”:“29849”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x0000001e”,
“收据.选择参数”:“9”,
“收据。已接收的收据id:“949BB6DE”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00000427”,
“收据.选择参数”:“1”,
收据。收据状态:“2”
}
}
},
“收据”:{
“收据.命令长度”:“241”,
“receives.command_id”:“0x00000005”,
“收据序列号”:“47208”,
“收据.数据\u编码”:“0x00000000”,
“收据.数据编码树”:{
“receives.rps”:“0x00000000”,
“收据类型1数据编码”:{
“receipts.rps.rc_coding_group”:“0x00000000”,
“receives.rps.text_compression”:“0”,
“收据.rps.class_当前”:“0”,
“receives.rps.charset”:“0x00000000”
},
“收据类型2数据编码”:{
“receipts.rps.rpk.编码组”:“0x00000000”,
“receipts.rps.rpk.\u语言”:“0x00000000”
}
},
“收据.rc\u默认收据\u id:“0”,
“收据.rc_长度”:“117”,
“收据.收据”:“98341”,
“收据.选项参数”:{
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003002”,
“收据.选择参数”:“10”,
“收据.供应商操作”:“38220”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003001”,
“收据.选择参数”:“10”,
“收据.供应商_op”:“93813”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003004”,
“收据.选择参数”:“1”,
“收据。供应商_op”:“00”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003000”,
“收据.选择参数”:“4”,
“收据.供应商操作”:“98381”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00003003”,
“收据.选择参数”:“10”,
“收据.供应商操作”:“77371”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x0000001e”,
“收据.选择参数”:“9”,
“收据。已收到的收据id:“6DED391C”
},
“收据.选项参数”:{
“receipts.opt_param_标记”:“0x00000427”,
“收据.选择参数”:“1”,
收据。收据状态:“2”
}
}
},
“收据”:{
“收据.命令长度”:“238”,
“receives.command_id”:“0x00000005”,
“收据序列号”:“47209”,
“收据.数据\u编码”:“0x00000000”,
“收据.数据编码树”:{
“receives.rps”:“0x00000000”,
“收据类型1数据编码”:{
import pandas as pd

i_file_name = 'example.json'

df = pd.read_json(i_file_name)
df = pd.json_normalize(df['_source'])

df_json = df.to_json(orient='records')

df = pd.read_json(df_json, orient='columns')
df_melt = pd.melt(df, id_vars=['layers.frame.frame.time',
                          'layers.frame.frame.number'
                       value_vars=['layers.receipts'])
df_melt2 = pd.DataFrame(df_melt['value'].values.tolist(), index=df_melt)
df_melt_full = pd.concat([df_melt, df_melt2], axis=1)
df_melt_full = df_melt_full.drop(['value', 'variable'], axis=1)
df_melt_full_melt = pd.melt(df_melt_full, 
                            id_vars=['layers.frame.frame.time',
                                     'layers.frame.frame.number']
                           )
df_normalized = pd.json_normalize(df_melt_full_melt['value'])
df_final = pd.concat([df_melt, df_normalized], axis=1)