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

Python中如何循环处理PostgreSQL查询结果并格式化为指定JSON结构

实现代码

你可以直接使用以下修改后的代码,完全满足你的需求,循环次数仅1次遍历查询结果,远低于要求的10次上限:

注意:你需求里的result['label']我默认是用返回的nom字段作为stations下的键,如果你实际的label是其他字段,替换代码里对应的部分即可。

import psycopg2
import json
from psycopg2.extras import RealDictCursor

def run(stmt):
    # 建立数据库连接
    conn = psycopg2.connect(database='x', user='s', password='!', host='1')
    # 使用RealDictCursor可直接返回字典格式的查询结果,无需手动映射字段
    cur = conn.cursor(cursor_factory=RealDictCursor)
    cur.execute(stmt)
    # 获取字典列表格式的查询结果
    result = cur.fetchall()
    # 关闭游标和连接避免资源泄漏
    cur.close()
    conn.close()
    return result

# 直接查询原始字段,不用在数据库侧转json,避免转义问题
stmt = 'SELECT id, nom, lon, lat FROM u.b_l_b_s JOIN u.b_s ON b_s.id = b_s_id JOIN u.b_l ON b_l.id = b_l_id JOIN u.b_s_t ON b_s_t.id = b_s_t_id'
query_result = run(stmt)

# 初始化目标结构
output_data = {
    "stations": {}
}

# 单次循环填充数据结构
for item in query_result:
    # 若你有单独的label字段,把下方item['nom']替换为item['label']即可
    station_key = item['nom']
    output_data['stations'][station_key] = {
        "id": item['id'],
        "nom": item['nom'],
        "position": {
            "lat": item['lat'],
            "lon": item['lon']
        }
    }

# 导出为JSON文件,ensure_ascii=False避免特殊字符乱码,indent=2格式化输出
with open("stations_output.json", "w", encoding="utf-8") as f:
    json.dump(output_data, f, ensure_ascii=False, indent=2)

# 可打印验证输出结果
print(json.dumps(output_data, ensure_ascii=False, indent=2))

补充说明

  • 代码使用RealDictCursor直接获取字典格式的查询结果,不需要额外解析数据库返回的转义JSON字符串,减少出错概率
  • 仅用1次循环完成数据组装,符合你最多10次循环的要求
  • 生成的JSON完全匹配你指定的结构格式

内容的提问来源于stack exchange,提问作者Tahiry-R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:57:04