如何在python中将展平表转换为嵌套(分层)json?

Posted

技术标签:

【中文标题】如何在python中将展平表转换为嵌套(分层)json?【英文标题】:how to convert flatten table to nested (hierarchical) json in python? 【发布时间】:2018-04-09 20:13:04 【问题描述】:

我有一张扁平的桌子。我想将其转换为嵌套的 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

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我递归地解决了这个问题。这个功能经过测试并且可以工作:

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'

【讨论】:

以上是关于如何在python中将展平表转换为嵌套(分层)json?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中将 JSON 转换为 HTML 表

如何在python,dataframe中将数据转换为嵌套字典

如何展平多个嵌套的 json 并转换为数据框?

在 d3.js 中将节点和链接转换为分层树

展平嵌套数组。 (爪哇)

如何展平嵌套元组?