CherryPy接口遍历数据库仅返回单条JSON,如何返回全部数据?
解决CherryPy接口仅返回首个用户数据的问题
嘿,这个问题很典型——你把return放在for循环内部了,导致第一次遍历到用户数据时就直接返回结果,后续的用户数据根本没机会被处理!而且每次循环你都把results覆盖成单个用户的JSON字符串,这也没法累积多组数据。
修改后的代码
import json import cherrypy @cherrypy.expose def values(self): # 设置响应头,告诉客户端返回的是JSON格式(最佳实践) cherrypy.response.headers['Content-Type'] = 'application/json' docs = db.collection(u'users').stream() # 初始化一个列表来存储所有用户的字典数据 results = [] for doc in docs: # 将每个用户的字典对象添加到列表中,而不是直接转JSON user_data = doc.to_dict() results.append(user_data) print(json.dumps(user_data)) # 依然可以正常打印所有用户数据 # 等所有用户数据都收集完成后,统一转成JSON数组返回 return json.dumps(results)
关键改动说明
- 用列表累积数据:把原来的
results = {}改成results = [],这样可以依次把每个用户的字典数据追加进去,形成一个用户列表。 - 把return移到循环外:确保循环遍历完所有数据库文档后,再返回最终的JSON结果,而不是中途退出。
- 添加响应头:设置
Content-Type: application/json,让客户端明确知道返回的是JSON格式的数据,避免解析异常。
这样修改后,接口就会返回包含所有用户数据的JSON数组,比如:
[{"born": 2000, "first": "John", "last": "Sam"}, {"born": 2000, "first": "James", "last": "tom"}, {"born": 2001, "first": "George", "last": "Kevin"}]
内容的提问来源于stack exchange,提问作者jeril
相关产品推荐
相关产品推荐

