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

Python将JSON文件转SQLite表时参数绑定类型错误如何解决

问题产生原因

你的JSON数据中存在嵌套结构:_id、cpg字段的值都是Python字典类型,而SQLite仅支持存储整数、浮点数、字符串、布尔值、NULL等基础标量类型,不支持直接写入字典这种复合类型,因此pandas调用to_sql写入时会触发类型不支持的报错。

解决方法

有两种常用方案,推荐选择第一种更方便后续数据分析:

方案1:将嵌套字段展开为扁平的标量字段

把嵌套层级里的取值提取成独立的单列,所有字段都转为SQLite支持的基础类型后再写入,修改后的代码如下:

import pandas as pd
import json
import sqlite3

# 读取json文件
with open("users.json", encoding="utf-8") as f:
    raw_dat = [json.loads(line.strip()) for line in f]

# 展开嵌套字段,处理为扁平结构
processed_dat = []
for item in raw_dat:
    flat_item = {}
    # 提取_id的oid值
    flat_item["id"] = item["_id"]["$oid"]
    # 提取一级普通字段
    flat_item["barcode"] = item.get("barcode")
    flat_item["brand_code"] = item.get("brandCode")
    flat_item["category"] = item.get("category")
    flat_item["category_code"] = item.get("categoryCode")
    flat_item["name"] = item.get("name")
    flat_item["top_brand"] = item.get("topBrand")
    # 提取cpg嵌套字段
    flat_item["cpg_id"] = item["cpg"]["$id"]["$oid"]
    flat_item["cpg_ref"] = item["cpg"]["$ref"]
    processed_dat.append(flat_item)

# 生成DataFrame
df = pd.DataFrame(processed_dat)

# 写入SQLite数据库
con = sqlite3.connect("fetch_rewards.db")
# if_exists参数可选:replace=覆盖旧表, append=追加, fail=表存在则报错
df.to_sql("users", con, if_exists="replace", index=False)

con.commit()
con.close()

方案2:将嵌套字段转为JSON字符串存储

如果不需要拆分嵌套字段的内容,也可以直接把字典序列化为JSON字符串写入,在生成原始df之后增加两行转换逻辑即可:

# 把嵌套字段转为json字符串
df["_id"] = df["_id"].apply(json.dumps)
df["cpg"] = df["cpg"].apply(json.dumps)

该方案缺点是后续查询嵌套字段内的取值需要额外做JSON解析,使用便捷度不如方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:03