我有一个 flask 休息服务器,其中包含许多检索json,tsv和csv文件的方法。
使用 SQLAlchemy 执行原始SQL查询。
我现在正在制作树形图。
查询结果示例:
date - group - person - value
1,1 - Alpha - John Test - 7
1,1 - Alpha - William Test - 7
需要json格式:
[{
"date": "1,1",
"name" :"Fixed",
"children":[{
"name" :"Alpha",
"children":[{
"name":"John Test",
"size":"7"
},
{
"name":"William Test",
"size":"7"
}
]
},
{
"name":"Beta",
"children" :[{
"name":"Another Test",
"size":"10"
}
我的方法
res 将是数据库结果休息
base = {
"date": "",
"name": "Frentes",
"children": []
}
child = {
"name": "",
"children": []
}
sub_child = {
"name": "",
"size": ""
}
c = 'children'
for row in res:
for k, v in list(row.items()):
if k == 'date':
if len(ret) == 0 or ret[-1]['date'] != v:
ret.append(base.copy())
ret[-1]['date'] = v
continue
else:
continue
elif k == 'group':
if len(ret[-1][c]) == 0 or ret[-1][c][-1]['name'] != v:
ret[-1][c].append(child.copy())
ret[-1][c][-1]['name'] = v
continue
else:
continue
elif k == 'person':
if len(ret[-1][c][-1][c]) == 0 or ret[-1][c][-1][c][-1]['name'] != v:
ret[-1][c][-1][c].append(sub_child.copy())
ret[-1][c][-1][c][-1]['name'] = v
continue
else:
continue
elif k == 'value':
ret[-1][c][-1][c][-1]['size'] = v
break
当我在完整数据库中执行包含所有实际结果的代码时:
我可以打印 ret
如果我尝试json.dumps(ret)
,我会收到内存错误我尝试了json.dumps和jsonify的不同方法,但无法使其正常工作。
我考虑过将所有内容流式传输到文件并返回该文件,但我不确定。
有什么想法吗?
重要提示:我有一个缓存,用于返回的json / tsv / csv文件,并且具有可配置的持续时间。