[英]How to create a json tree structure from SQLalchemy model
我正在嘗試使用Flask創建一個Web服務,我的Web服務需要返回屬於配置文件的所有活動的json編碼樹結構。
我的模特:
class Activity(db.Model):
__tablename__ = 'activity'
id = db.Column(db.Integer, primary_key=True)
profile_id = db.Column(db.String, db.ForeignKey('profile.id'), nullable=False, index=True)
parent_id = db.Column(db.Integer, db.ForeignKey('activity.id'), index=True)
name = db.Column(db.String)
parent = db.relationship('Activiteit', remote_side=[id], backref='children')
class Profile(db.Model):
__tablename__ = 'profile'
id = db.Column(db.Integer, primary_key=True)
profile_name = db.Column(db.String(64))
active = db.Column(db.Boolean, nullable=False)
activities = db.relationship('Activity', backref="profile", lazy='dynamic')
employees = db.relationship('Employee', backref="profile", lazy='dynamic')
我需要以下結構:
Main activity 1
Sub activity 1
Sub activity 2
Subsub activity 1
Main activity 2
etc. etc.
我嘗試創建嵌套字典和字典列表,但是每次遇到困難時,我都會嘗試創建。 最終成為1級元素的3級元素或僅返回2個級別的樹。
經過一番搜索,我發現我需要創建一個帶有包含名稱和子列表的節點的隊列,然后將節點添加到樹中。
我使用以下功能創建了隊列:
def get(self, profile_id):
profile = models.Profile.query.get(profile_id)
queue = {}
for activity in profile.activities:
queue[activity.name]= [c.name for c in activity.children]
現在,我不知道如何進行操作,或者我是否處在正確的方法上。 任何幫助都感激不盡
基於Codegeek的答案,我創建以下內容:
def get(self, profile_id):
activities = models.Activity.query.filter_by(profile_id=profile_id).all()
tree = {}
for level1 in activities:
if level1.parent_id is None:
tree[level1.name] = {'id': level1.id}
for level2 in level1.children:
tree[level1.name][level2.name] = {'id': level2.id}
for level3 in level2.children:
tree[level1.name][level2.name][level3.name] = {'id': level3.id}
return tree
您是否嘗試過使用flask.jsonify()
?
jsonify()將字典作為參數。 您可以嘗試創建嵌套字典。 在您的情況下,它是3個級別,可能看起來像:
d= { 'Activity': { 'Subactivity': { 'Subsubactivity': 'value }}}
您尚未在創建字典的地方共享您的代碼,但是可以執行以下操作(我使用的是通用名稱)
d = {}
for activity in Activities:
for subactivity in activity:
for subsubactivity in subactivity:
d['Activity']['Subactivity']['subsubactivity'] = value
然后,您可以將JSON重新轉換為:
return flask.jsonify(**d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.