如何将分层表转换为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的主要内容,如果未能解决你的问题,请参考以下文章
Swifty JSON:将 JSON 数组中的对象分层列表转换为分层 Swift 对象