2017-10-28 108 views
-3

我有一个平坦的桌子。我想将它转换为嵌套的json格式。如何在python中将flatten表转换为嵌套(分层)json?

database  schema table_name   col_name 

exploration dbo TestTable   name 
exploration dbo TestTable   last_name 
exploration dbo Table_1    name 
exploration dbo Table_1    d_id 
exploration dbo tblMonitorChange EventType 
exploration dbo tblMonitorChange SchemaName 
exploration dbo tblMonitorChange ObjectName 
exploration dbo tblMonitorChange ObjectType 
exploration dbo tblMonitorChange EventDate 
exploration dbo tblMonitorChange SystemUser 
exploration dbo tblMonitorChange CurrentUser 
exploration dbo tblMonitorChange OriginalUser 
ReportServer dbo Users    UserID 
ReportServer dbo Users    Sid 
ReportServer dbo Users    UserType 
ReportServer dbo Users    AuthType 
ReportServer dbo Users    UserName 
ReportServer dbo Users    ServiceToken 
ReportServer dbo Users    Setting 

我在寻找一个通用的解决方案,而不是硬编码列名称。

任何帮助,将不胜感激。

回答

0

我递归地解决了这个问题。此功能测试和工程:

def table_to_json(model): 
    print('-------------------------------------------------------------') 
    doc = {}; 
    col_names = list(model.columns) 
    grouped = model.groupby(col_names[0])[col_names[1]] 
    values = grouped.apply(lambda x: set(x.tolist())) 
    a = values.shape 
    if(len(col_names)==2): 
     return dict(values) 
    keys = list(grouped.groups.keys()) 
    for k in keys: 
     doc.update({k:table_to_json(model[model[col_names[0]] == k][col_names[1:]])}) 

    return doc 

它需要一个数据框(检查我的第一篇)作为输入,并返回一个字典文件作为输出。这是输出的一部分:

{'exploration': {'dbo': {'Table_1': {'d_id', 'name'}, 
    'TestTable': {'last_name', 'name'}, 
    'tblMonitorChange': {'CurrentUser', 
    'EventDate', 
    'EventType', 
    'ObjectName', 
    'ObjectType', 
    'OriginalUser', 
    'SchemaName', 
    'SystemUser'}}}, 
'ReportServer': {'dbo': {'ActiveSubscriptions': {'ActiveID', 
    'SubscriptionID', 
    'TotalFailures', 
    'TotalNotifications', 
    'TotalSuccesses'}, 
    'Batch': {'Action', 
    'AddedOn', 
    'BatchID', 
    'BoolParam', 
    'Content', 
    'Item', 
    'Param', 
    'Parent', 
    'Properties'}}}} 
相关问题