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

多页API JSON数据合并为单对象及JSON序列化报错解决方案咨询

解决思路与修正方案

嘿,这个问题其实是个很典型的小语法疏漏——我一眼就看到问题所在啦!

核心错误原因

你代码里的requests.get(url).json少了一对括号!json是requests响应对象的方法,必须调用它(也就是写成.json())才能得到解析后的JSON数据。你现在往response列表里存的是方法本身(比如<bound method Response.json of <Response [200]>>这类对象),而不是实际的JSON内容,这就导致json.dumps()试图序列化方法对象时,抛出Object of type 'method' is not JSON serializable的错误。


具体解决步骤与修正代码

1. 先修正数据获取的核心问题

把.json改成.json(),同时注意分页范围:你要遍历32页,但range(1,32)只会到第31页(因为Python的range是左闭右开),所以得写成range(1,33)才会覆盖1-32页:

import requests
import json

response_data = []
# 遍历1到32页
for page in range(1, 33):
    url = f"https://api.dane.gov.pl/resources/17201/data?page={page}"
    # 调用.json()方法获取解析后的JSON数据
    page_content = requests.get(url).json()
    response_data.append(page_content)

2. 合并数据为大对象

根据API返回的结构选择合适的合并方式:

  • 如果每页返回的是数据列表(比如每页是多条记录的数组),用extend直接合并元素比append存整个页列表更合理:
    all_records = []
    for page in range(1, 33):
        url = f"https://api.dane.gov.pl/resources/17201/data?page={page}"
        page_content = requests.get(url).json()
        # 直接把每页的记录加入总列表
        all_records.extend(page_content)
    
  • 如果每页返回的是包含数据字段的字典(比如有data字段存记录,还有分页信息),就提取对应字段合并:
    all_records = []
    for page in range(1, 33):
        url = f"https://api.dane.gov.pl/resources/17201/data?page={page}"
        page_response = requests.get(url).json()
        # 假设数据存在'data'关键字下
        all_records.extend(page_response['data'])
    

3. 可选优化:让程序更健壮

加入异常处理和请求优化,避免因网络问题或API限流导致程序崩溃:

import requests
import json
from time import sleep

# 使用Session保持连接,提升请求效率
session = requests.Session()
all_records = []

for page in range(1, 33):
    try:
        url = f"https://api.dane.gov.pl/resources/17201/data?page={page}"
        response = session.get(url)
        # 若API返回非200状态码,直接抛出异常
        response.raise_for_status()
        page_content = response.json()
        all_records.extend(page_content)
        # 加0.5秒延迟,避免请求过于频繁被限流
        sleep(0.5)
    except requests.exceptions.RequestException as e:
        print(f"获取第{page}页失败: {str(e)}")
        continue

# 现在可以正常序列化合并后的大对象了
final_json = json.dumps(all_records)

为什么之前的json.loads()/json.dumps()没用?

因为你列表里存的根本不是JSON字符串或可序列化的Python对象,而是方法引用。只有当你用.json()拿到实际的字典/列表后,json.dumps()才能正常工作——它的作用是把Python可序列化对象转成JSON字符串,而不是处理方法这类不可序列化的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:31:44