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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:45:30