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
相关产品推荐
相关产品推荐

