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

从Snowflake获取JSON数据到Python格式不符 如何正确写入JSON文件

问题根因

Snowflake Python连接器默认会对查询返回的VARIANT、OBJECT、ARRAY类型的JSON数据做自动反序列化,转成Python原生的字典、列表对象;而Snowflake控制台直接返回未经过二次解析的原始JSON字符串,两者的格式差异是连接器默认类型转换逻辑导致的,和查询语句本身无关。你直接写入本地文件的内容和Python端拿到的错误格式一致,本质是写入时用的就是被自动转换过的Python对象,不是Snowflake返回的原始JSON。

可落地解决步骤
  • 关闭连接器的JSON自动解析能力
    初始化Snowflake连接时,传入json_deserializer=None参数即可关闭自动反序列化,示例连接代码:
    import snowflake.connector
    
    con = snowflake.connector.connect(
        user="你的账号",
        password="你的密码",
        account="你的账号标识",
        warehouse="计算仓库名",
        database="数据库名",
        schema="模式名",
        json_deserializer=None # 核心配置,关闭JSON自动解析
    )
    
    如果你用SQLAlchemy对接Snowflake,初始化引擎时加对应连接参数即可:create_engine(connection_url, connect_args={"json_deserializer": None})。如果不想修改连接配置,也可以在创建游标后执行cursor.execute("ALTER SESSION SET DISABLE_JSON_PARSER = TRUE"),在当前会话级别关闭JSON解析。
  • 校验返回结果一致性
    执行查询后,打印返回结果中JSON字段的类型,确认类型为str,且字符串内容和Snowflake控制台输出的原生JSON完全匹配,没有被转成Python字典/列表对象。
  • 正确写入本地JSON文件
    关闭自动解析后拿到的是原始JSON字符串,不要直接对字符串调用json.dump(),否则会给内容额外添加转义符:
    • 单条JSON结果直接按文本写入即可
    • 多条结果需要组成JSON数组的,先逐行把字符串转成JSON对象,再统一序列化写入,参考代码:
    cursor = con.cursor()
    cursor.execute("你的查询SQL")
    # 拿到所有结果,假设JSON字段的列名为NATIVE_JSON
    rows = cursor.fetchall()
    col_names = [desc[0] for desc in cursor.description]
    result_list = [dict(zip(col_names, row)) for row in rows]
    
    # 单条结果写入示例
    with open("single_output.json", "w", encoding="utf-8") as f:
        f.write(result_list[0]["NATIVE_JSON"])
    
    # 多条结果组成JSON数组写入示例
    import json
    json_arr = [json.loads(row["NATIVE_JSON"]) for row in result_list]
    with open("multi_output.json", "w", encoding="utf-8") as f:
        json.dump(json_arr, f, ensure_ascii=False, indent=2)
    
常见避坑提示
  • 不要在开启自动JSON解析的前提下,直接对Python dict/list做json.dump()写入,会出现字段顺序变化、大整数精度丢失、空值/日期类型格式和Snowflake原生输出不一致的问题。
  • 如果要求100%对齐Snowflake控制台的JSON输出格式(包括缩进、字段顺序、数值精度),优先选择关闭自动解析拿原始字符串的方案,不要依赖连接器的自动类型转换。

内容的提问来源于stack exchange,提问作者Jaho0na

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:40:05