如何将分层表转换为json

Posted

技术标签:

【中文标题】如何将分层表转换为json【英文标题】:How to convert hierarchical table to json 【发布时间】:2019-05-21 03:27:16 【问题描述】:

我正在尝试将多级层次结构表转换为特定的 JSON 格式以用于我正在创建的视觉效果。

我在 pandas 数据框中有数据,并尝试按不同级别对其进行分组,但随后无法使用 pandas 将 groupby 转换为 json。我也尝试将数据框转换为 json,但格式不正确。我不确定还能做什么来获得我正在寻找的父/子格式。所有“大小”值只需要为 1,这样这部分看起来就足够简单了…… 提前致谢!

**This is what my data looks like**
ColA     ColB     ColC   
Parent1  Child1   
Parent1  Child2   Child2A 
Parent1  Child2   Child2B
Parent1  Child3   Child2A
Parent2  Child1
Parent2  Child2   Child2A

我从 pandas 数据框 to_json 得到的是逐列创建 json,所以我失去了它的层次结构方面。

所以它:

data = "Parent1""index #":"col2 value"

我想要的是:

data = ( "name":"TEST",
"children": [
  
    "name": "Parent1",
    "children": 
      [
      
        "name": "Child1",
        "size": "1"
      ,
      
      "name":"Child2",
        "children": 
        [
        
          "name":"Child2A",
          "size":"1" 
        ,
        
          "name":"Child2B",
          "size":"1" 
        ,
        
          "name":"Child2C",
          "size":"1" 
        ,
        
          "name":"Child2D",
          "size":"1" 
        ,
        ],
      ,
    
      "name":"Parent2",
      "children": [
        
          "name":"Child2A",
          "size":"1" 
        ,
        
          "name":"Child2B",
          "size":"1" 
        ,
        
          "name":"Child2C",
          "size":"1" 
        ,
      ]
    ,
    ]
  ,
  
    "name": "Parent3",
    "children": 
    [
      
        "name": "Child1",
        "size": "1",
      ,
      
      "name":"Child2",
      "children": 
      [
        
          "name":"Child2A",
          "size":"1" 
        ,
        
          "name":"Child2B",
          "size":"1" 
        ,
        
          "name":"Child2C",
          "size":"1" 
        ,
      ],
    ,
    
      "name":"Child3",
      "children": 
      [
        
          "name":"Child3A",
          "size":"1" 
        ,
      ],
    ,
    ],
  ,
])

【问题讨论】:

没有直接的库/解决方案,首先您需要转换您的dataframe to JSON,然后您需要以您的方式自定义 JSON。 感谢您的回复,您能否提供一些指导,说明我将如何对其进行自定义以使其成为该格式? 【参考方案1】:

我们来了

import json

data = [
    'Parent1  Child1',
    'Parent1  Child2   Child2A',
    'Parent1  Child2   Child2B',
    'Parent1  Child3   Child2A',
    'Parent2  Child1',
    'Parent2  Child2   Child2A',
]

tree = 

for d in data:
    node = None
    for item in d.split():
        name = item.strip()  # dont need spaces
        current_dict = tree if node is None else node
        node = current_dict.get(name)
        if not node:
            node = 
            current_dict[name] = node


def walker(src, res):
    for name, value in src.items():
        node = 'name': name, 'size': 1
        if 'children' not in res:
            res['children'] = []
        res['children'].append(node)
        walker(value, node)

result = 'name': 'TEST'
walker(tree, result)

print (json.dumps(result, indent = True))

【讨论】:

葡萄,谢谢你,一个问题。我进行了测试,对于具有多个单词的元素,代码将每个单词拆分为自己的“名称”,如果数据是“父母 A”或“简·史密斯”,有没有办法进行这项工作?还是必须是“JaneSmith”? 你可以使用underscope代替空格。否则你如何建议像john doe smith这样的分割线?你永远不知道一个人在哪里结束,另一个人从哪里开始 最好的办法是在文件中使用逗号而不是空格。然后你会得到 CSV 并且可以轻松地使用长名称。但在这种情况下,您应该将代码更新为split(','),并且不要忘记调用strip() 以消除两边的空格 谢谢大家,这主要是有效的,我现在解决的唯一问题是这确实为每个名称附加了一个“大小”,并且在有“子”元素的情况下应该不是大小。 这确实有效,但确实出现了一个需要额外清理的问题,即每个子元素都被赋予了大小,如果子元素也有子元素,则它不需要大小。否则葡萄的想法就像一个魅力!

以上是关于如何将分层表转换为json的主要内容,如果未能解决你的问题,请参考以下文章

将扁平的分层数据转换为树状结构的 JSON

Swifty JSON:将 JSON 数组中的对象分层列表转换为分层 Swift 对象

使用 C# 将数据表转换为分层数据结构 (JSON)

python - 如何以python中的功能方式将字符串转换为分层数据结构中的dict?

如何将多层嵌套的json转换为sql表

如何将熊猫数据透视表转换为 JSON [重复]