如何解析Python从API获取的JSON数据并插入Postgres表
问题解答
一、record_list的实际数据类型
你通过json.loads()解析接口返回内容后,拿到的record_list本质是Python字典(dict),并非列表。
从你提供的示例JSON结构就能直观看出:整个接口返回是由多组键值对嵌套构成的顶层对象,不存在顶层数组结构,因此你之前写的if type(record_list) == list判断分支永远不会触发。
二、可入库数据的位置
你需要的、对应两个数据库字段的核心业务数据,全部嵌套在这个字典的rates键下:
rates本身也是一个字典,结构为{货币代码: 对应汇率值},刚好和你表的两个字段一一对应:- 字典的键 → 对应
currency_name字段(比如示例里的"AED"、"AFN"这类三位货币代码) - 字典的值 → 对应
rate字段(对应货币对基准货币的汇率数值)
- 字典的键 → 对应
三、解析并入库的实现步骤
- 先做响应有效性校验
先判断字典里success键的取值是否为True,如果接口返回了错误状态,直接终止流程,避免把错误数据写入数据库。 - 整理待插入的数据集
遍历rates字典的所有键值对,把每一组(货币代码,汇率值)整理成数据库批量插入需要的元组格式。 - 批量写入数据库
用数据库连接提供的批量插入方法一次性把整理好的数据集写入表中,相比单条循环插入可以大幅降低数据库交互开销。
参考实现代码
# 校验接口请求状态 if not record_list.get("success"): raise ValueError("汇率API返回请求失败,终止入库") # 提取核心汇率数据 rates_map = record_list.get("rates", {}) # 整理为待插入的元组列表 insert_data = [ (currency, rate) for currency, rate in rates_map.items() ] # 执行批量插入(替换为你实际使用的数据库连接对象即可) # 示例逻辑适配大多数Python数据库驱动的批量操作写法 insert_sql = "INSERT INTO your_table_name (currency_name, rate) VALUES (?, ?)" db_cursor.executemany(insert_sql, insert_data) db_conn.commit()
补充提示:
- 你现有代码里的
urllib.urlopen是Python2的专属写法,Python3环境下对应调用为urllib.request.urlopen,如果运行时报错优先排查这个兼容性问题- 入库前可以先查询当日、同基准货币的汇率是否已经存在,避免重复写入冗余数据
内容的提问来源于stack exchange,提问作者Matias
相关产品推荐
相关产品推荐

