Python从列表为字典添加键:Snowflake查询结果转带列名JSON
问题描述
从Snowflake查询得到的Python数据格式如下:
[('123','',datetime.date(9999,12,31)), ('321', '981', datetime.date(9999,12,31))]
需要将其转换为包含指定列名(Number、ExternalNumber、effective_date)的JSON格式,最终输出要求:
[{ "Number": "123", "ExternalNumber": "", "effective_date": "9999,12,31" }, { "Number": "321", "ExternalNumber":"981", "effective_date": "9999,12,31" }]
实现方法
可以通过以下步骤完成转换:
- 导入
json模块处理JSON序列化,确保能处理日期对象的格式转换 - 定义列名与查询结果元组的映射关系
- 遍历查询结果,将每个元组转换为目标字典,同时格式化日期字段
- 序列化为带缩进的JSON字符串
完整代码示例
import json from datetime import date # 模拟从Snowflake获取的查询结果 query_results = [('123','',date(9999,12,31)), ('321', '981', date(9999,12,31))] # 列名顺序需与查询结果元组的字段顺序完全匹配 column_mapping = ["Number", "ExternalNumber", "effective_date"] # 转换数据结构并格式化日期 converted_data = [] for item in query_results: # 将datetime.date对象转为"YYYY,MM,DD"格式字符串 date_str = f"{item[2].year},{item[2].month},{item[2].day}" converted_data.append({ column_mapping[0]: item[0], column_mapping[1]: item[1], column_mapping[2]: date_str }) # 生成带缩进的JSON输出 final_json = json.dumps(converted_data, indent=2) print(final_json)
关键说明
- 列名列表的顺序必须严格对应查询结果元组的字段顺序,避免映射错误
- 日期格式化直接提取
date对象的年、月、日属性拼接,确保格式符合要求 json.dumps的indent=2参数用于生成和示例一致的格式化JSON输出
内容的提问来源于stack exchange,提问作者ajc_123
相关产品推荐
相关产品推荐

