Python 使用嵌套列名将嵌套json展平为csv
我现在有一个很奇怪的要求。我有下面的json,不知何故我必须将其转换为平面csvPython 使用嵌套列名将嵌套json展平为csv,python,pandas,Python,Pandas,我现在有一个很奇怪的要求。我有下面的json,不知何故我必须将其转换为平面csv [ { "authorizationQualifier": "SDA", "authorizationInformation": " ", "securityQualifier": "ASD", "securityInformation": " ", "senderQualifier": "ASDAD", "senderId":
[
{
"authorizationQualifier": "SDA",
"authorizationInformation": " ",
"securityQualifier": "ASD",
"securityInformation": " ",
"senderQualifier": "ASDAD",
"senderId": "FADA ",
"receiverQualifier": "ADSAS",
"receiverId": "ADAD ",
"date": "140101",
"time": "0730",
"standardsId": null,
"version": "00501",
"interchangeControlNumber": "123456789",
"acknowledgmentRequested": "0",
"testIndicator": "T",
"functionalGroups": [
{
"functionalIdentifierCode": "ADSAD",
"applicationSenderCode": "ASDAD",
"applicationReceiverCode": "ADSADS",
"date": "20140101",
"time": "07294900",
"groupControlNumber": "123456789",
"responsibleAgencyCode": "X",
"version": "005010X221A1",
"transactions": [
{
"name": "ASDADAD",
"transactionSetIdentifierCode": "adADS",
"transactionSetControlNumber": "123456789",
"implementationConventionReference": null,
"segments": [
{
"BPR03": "ad",
"BPR14": "QWQWDQ",
"BPR02": "1.57",
"BPR13": "23223",
"BPR01": "sad",
"BPR12": "56",
"BPR10": "32424",
"BPR09": "12313",
"BPR08": "DA",
"BPR07": "123456789",
"BPR06": "12313",
"BPR05": "ASDADSAD",
"BPR16": "21313",
"BPR04": "SDADSAS",
"BPR15": "11212",
"id": "aDSASD"
},
{
"TRN02": "2424",
"TRN03": "35435345",
"TRN01": "3435345",
"id": "FSDF"
},
{
"REF02": "fdsffs",
"REF01": "sfsfs",
"id": "fsfdsfd"
},
{
"DTM02": "2432424",
"id": "sfsfd",
"DTM01": "234243"
}
],
"loops": [
{
"id": "24324234234",
"segments": [
{
"N101": "sfsfsdf",
"N102": "sfsf",
"id": "dgfdgf"
},
{
"N301": "sfdssfdsfsf",
"N302": "effdssf",
"id": "fdssf"
},
{
"N401": "sdffssf",
"id": "sfds",
"N402": "sfdsf",
"N403": "23424"
},
{
"PER06": "Wsfsfdsfsf",
"PER05": "sfsf",
"PER04": "23424",
"PER03": "fdfbvcb",
"PER02": "Pedsdsf",
"PER01": "sfsfsf",
"id": "fdsdf"
}
]
},
{
"id": "2342",
"segments": [
{
"N101": "sdfsfds",
"N102": "vcbvcb",
"N103": "dsfsdfs",
"N104": "343443",
"id": "fdgfdg"
},
{
"N401": "dfsgdfg",
"id": "dfgdgdf",
"N402": "dgdgdg",
"N403": "234244"
},
{
"REF02": "23423342",
"REF01": "fsdfs",
"id": "sfdsfds"
}
]
}
]
}
]
}
]
}
]
与更深层键值对应的列标题名采用嵌套形式,如函数组[0]。事务[0]。段[0]。BPR15
我可以在java中使用一行代码(在这里,您可以在解释中找到我想要的输出格式)来实现这一点:
flatJson = JSONFlattener.parseJson(new File("files/simple.json"), "UTF-8");
结果是:
date,securityQualifier,testIndicator,functionalGroups[1].functionalIdentifierCode,functionalGroups[1].date,functionalGroups[1].applicationReceiverCode, ...
140101,00,T,HP,20140101,ETIN,...
但我想用python来实现这一点。我试着按照回答中的建议:
但是,对于列functionalGroups
,它将json作为单元格值转储
我还尝试了以下建议:
但这似乎也起到了同样的作用:
0
acknowledgmentRequested 0
authorizationInformation
authorizationQualifier SDA
date 140101
functionalGroups [{'functionalIdentifierCode': 'ADSAD', 'applic...
interchangeControlNumber 123456789
receiverId ADAD
receiverQualifier ADSAS
securityInformation
securityQualifier ASD
senderId FADA
senderQualifier ASDAD
standardsId None
testIndicator T
time 0730
version 00501
有可能在python中实现我想要的功能吗?试试这个库,或者如果你想编写自己的版本,就以此为出发点:是的,它在某种程度上起了作用……我得到了
functionalGroups\u 0\u transactions\u 0\u loops\u 0\u segments\u 0\u N101形式的列名。我猜测类似于函数组[0]。事务[0]。循环[0]。段[0]。N101
。但我想这是根本没有处理,将需要相当大的代码更改…请参阅第二个链接,如果你想要你的版本。谢谢你告诉我正确的方向!!!令人惊讶的是,它不可能开箱即用……试试这个库,或者如果你想编写你自己的版本,就以此为起点:是的,它在某种程度上起了作用……我得到了functionalGroups\u 0\u transactions\u 0\u loops\u 0\u segments\u 0\u N101
形式的列名。我猜测类似于函数组[0]。事务[0]。循环[0]。段[0]。N101
。但我想这是根本没有处理,将需要相当大的代码更改…请参阅第二个链接,如果你想要你的版本。谢谢你告诉我正确的方向!!!令人惊讶的是它不可能开箱。。。
with open('data.json') as f: # this ensures opening and closing file
a = json.loads(f.read())
df = pandas.DataFrame(a)
print(df.transpose())
0
acknowledgmentRequested 0
authorizationInformation
authorizationQualifier SDA
date 140101
functionalGroups [{'functionalIdentifierCode': 'ADSAD', 'applic...
interchangeControlNumber 123456789
receiverId ADAD
receiverQualifier ADSAS
securityInformation
securityQualifier ASD
senderId FADA
senderQualifier ASDAD
standardsId None
testIndicator T
time 0730
version 00501