2017-10-28 20 views
-3

나는 평평한 테이블을 가지고 있습니다. 중첩 된 json 형식으로 변환하고 싶습니다.평평한 테이블을 파이썬에서 중첩 된 (계층 적) 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 

는 입력으로 dataframe (내 첫 번째 게시물에 그것을 확인)를 받아, 출력으로 사전에 문서를 반환합니다. 이 출력의 일부입니다 :

{'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'}}}}