You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:22:58