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

解析application/json类型API响应时遇JSONDecodeError,需获取各分类id

解决JSONDecodeError: 额外数据:第1行第2列(字符1)问题

问题本质

这个错误说明你请求的API返回的内容不是合法的单个JSON结构,常见原因包括:

  • 响应开头有多余字符(如UTF-8 BOM头、空格、注释)
  • 返回了多个独立的JSON对象(比如{...}{...}这种拼接格式)
  • 实际是JSONP格式(带回调函数包裹)而非纯JSON

排查与修复步骤

1. 先确认原始响应内容

在调用.json()前,先打印原始响应文本,明确问题所在:

import requests

responseObj = requests.get(myAPIurl)
# 打印原始响应内容
print("原始响应文本:", responseObj.text)
# 确认响应头的Content-Type
print("响应类型:", responseObj.headers.get('Content-Type'))

2. 针对不同场景的修复方案

场景1:响应带BOM头或多余前缀

如果响应开头有\ufeff这类BOM字符,手动清理后再解析:

import json
import requests

responseObj = requests.get(myAPIurl)
# 去除UTF-8 BOM头
cleaned_text = responseObj.text.encode('utf-8').decode('utf-8-sig')
data = json.loads(cleaned_text)

场景2:返回多个JSON对象(JSON流)

如果API返回的是多行JSON(NDJSON)或拼接的多个对象,拆分后逐个解析:

import json
import requests

responseObj = requests.get(myAPIurl)
# 按换行拆分处理NDJSON格式
decoder = json.JSONDecoder()
pos = 0
all_data = []
while pos < len(responseObj.text):
    obj, pos = decoder.raw_decode(responseObj.text, pos)
    all_data.append(obj)
# 若返回的是单个预期结构,取第一个即可
data = all_data[0]

场景3:实际是JSONP格式

如果响应是callback({...})这类JSONP,提取中间的JSON部分:

import json
import requests

responseObj = requests.get(myAPIurl)
# 提取括号内的JSON内容
json_str = responseObj.text.split('(')[1].split(')')[0]
data = json.loads(json_str)

提取各分类下的ID

成功解析数据后,遍历指定分类提取ID:

# 假设data是解析后的字典
target_categories = ['articles', 'news', 'blogs', 'books', 'events']
all_ids = []

for category in target_categories:
    items = data.get(category, [])
    for item in items:
        item_id = item.get('id')
        if item_id:
            all_ids.append(item_id)

print("所有分类的ID列表:", all_ids)

内容的提问来源于stack exchange,提问作者maverick-murthy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:58:24