PythonNeoModel如何将查询结果返回为JSON Obj

2024-05-06 07:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python相当陌生,在我的应用程序中,我使用Neomodel从Neo4j数据库加载和检索图形数据。在

在我的一条路线中,我有以下功能:

@api_mod.route('/users')                                                            
def get_users():                                                                                                                                                        
     users = User.nodes #Returns a NodeSet                                                                                                                              
     list_of_users = list(users) #Converts the NodeSet object to a list                                                                                                                                                                                                                                                                    
     return json.dumps(dict(users = [user for user in list_of_users]))    

我的用户类定义如下:

^{pr2}$

我的期望是My/users路由将返回一个JSON对象,其中包含数据库中的所有用户。我知道NodeSet对象不能序列化为JSON对象,因此我尝试将其转换为list。但现在当我运行时,我得到以下错误: “TypeError:'User'类型的对象不是JSON可序列化的”

下面是整个堆栈跟踪: 回溯(最近一次呼叫): 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本“,第1997行,in调用 返回self.wsgi_应用程序(环境,启动响应) 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本,第1985行,在wsgi\u应用程序中 响应=self.handle_异常(五) 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本“,第1540行,在handle\u异常中 重读(exc_type,exc_value,tb) 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/_兼容“,第33行,重排 提高价值 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本,第1982行,在wsgi\u应用程序中 响应=self.full_调度请求() 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本“,第1614行,在完整的调度请求中 rv=self.handle_user_异常(五) 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本“,第1517行,在handle_user\u异常中 重读(exc_type,exc_value,tb) 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/_兼容“,第33行 提高价值 文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/应用程序副本“,第1612行,在完整的调度请求中 rv=自我调度请求() 文件“/virtuallib/Users/virtual/file6/virtual/Users/packages/virtual-lib/Users/packages//应用程序副本“,第1598行,调度请求中 返回self.view功能规则.终结点 文件“/Users/mdebarros/PycharmProjects/useractivitylogs/app/api/routes.py“,第16行,在“获取用户”中 返回json.dumps文件(dict(users=[用户列表中的用户]) 文件“/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/init.py”,第231行,转储中 返回默认值_编码器.编码(目标) 文件“/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/编码器.py“,第199行,编码 块=self.iterencode(o,u one_shot=真) 文件“/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/编码器.py,第257行,在iterencode中 返回iterencode(o,0) 地下室框架/pyn3/us3/File/Python.framework/Versions/3.6/lib/python3.6/json/编码器.py“,默认为第180行 o、 名称) TypeError:“User”类型的对象不是JSON可序列化的

关于如何处理这个问题并返回一个合适的JSON对象有什么帮助或建议吗?在

提前感谢您的任何帮助。在

——总经理


Tags: 文件对象selfjson应用程序flasklibpackages
1条回答
网友
1楼 · 发布于 2024-05-06 07:03:14

如您所知,用户类模型必须有一个方法来执行数据结构的转换(序列化),要解决这个问题,一个解决方案是添加一个这样做的方法:

class User(StructuredNode):
    user_id = StringProperty(unique_index=True, required=True)
    logged_in = RelationshipTo('Environment', 'LOGGED_IN', model=LoginAction)
    launched = RelationshipTo('Application', 'LAUNCHED', model=LaunchedAction)
    entered = RelationshipTo('Application', 'ENTERED', model=EnteredAction)
    accessed = RelationshipTo('Application', 'ACCESSED', model=AccessedAction)
    exited = RelationshipTo('Application', 'EXITED', model=ExitedAction)
    logged_out = RelationshipTo('Environment', 'LOGGED_OUT', model=LogoutAction)
    timed_out = RelationshipTo('Environment', 'TIME_OUT', model=TimeoutAction)

@property
def serialize(self):
    return {
        'user_id': self.user_id,
        'logged_in': self.logged_in,
        'launched': self.launched,
        'entered': self.entered,
        'accessed': self.accessed,
        'exited': self.exited,
        'logged_out': self.logged_out,
        'timed_out'  : self.timed_out
   }

现在,由于方法已添加为属性,因此可以将其称为属性:

^{pr2}$

相关问题 更多 >