使用Python、Flask和MongoDB实现GET接口返回指定格式全集合数据问题
解决Flask-MongoDB返回带序号键的JSON格式问题
你想要把MongoDB集合里的每一条time和temp数据,转换成带序号的键值对(比如time1、temp1、time2、temp2)并封装在Results对象里返回,对吧?当前你的代码返回的是数组结构,和需求的格式不匹配,咱们来调整一下。
问题核心
你现在的代码是把每条数据作为独立对象塞进数组,但需求是要一个扁平的对象,用带序号的键来存储所有时间和温度值。关键在于利用遍历的序号动态生成对应的键名。
修改后的代码方案
我们可以用enumerate()函数遍历集合文档,同时获取从1开始的序号,用这个序号拼接出timeN和tempN这类键,再把键值对逐个存入结果字典:
# Initialize MongoDB mongo = PyMongo(app) # [GET] retrieve list of setpoints @app.route('/setpoints', methods=['GET']) def get_all_setpoints(): setpoints = mongo.db.setpoints result_dict = {} # 用字典存储带序号的键值对 # 用enumerate遍历,start=1让序号从1开始计数 for idx, q in enumerate(setpoints.find(), start=1): # 动态生成带序号的键名 result_dict[f'time{idx}'] = q['time'] result_dict[f'temp{idx}'] = q['temp'] # 返回符合要求的JSON结构 return jsonify({'Results': result_dict})
效果说明
修改后返回的JSON会是合法且符合你需求的格式:
{ "Results": { "time1": "TIME1_STR", "temp1": "TEMP1_STR", "time2": "TIME2_STR", "temp2": "TEMP2_STR", "time3": "TIME3_STR", "temp3": "TEMP3_STR" } }
这里需要提一句:你给出的原示例格式里,Results里写了多个独立对象,这其实是无效的JSON结构,上面的方案调整为合法的单对象形式,同时保留了带序号键的核心要求。
内容的提问来源于stack exchange,提问作者pkitsos
相关产品推荐
相关产品推荐

