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

使用urllib.request时无法用pandas.json_normalize归一化数据的解决方法

问题解决:TypeError: byte indices must be integers or slices, not str

错误原因

你调用response.read()得到的是字节流(bytes类型),不是解析后的JSON字典。直接用json_response['results']去索引字节流,就会触发这个类型错误——因为字节流只能用整数/切片索引,不能用字符串键。

修正步骤

需要先把字节流解码为字符串,再解析成Python字典,之后才能用pandas.json_normalize处理:

  • 使用.decode('utf-8')(或对应接口的编码)将字节转成字符串
  • 用json.loads()把字符串解析为JSON对象(字典/列表)

修正后的完整代码

import urllib.request
import json
import pandas as pd

req = urllib.request.Request(url, headers=hdr)
req.get_method = lambda: 'GET'
response = urllib.request.urlopen(req)

print(response.getcode())
# 1. 解码字节流为字符串,再解析为JSON字典
json_str = response.read().decode('utf-8')
json_response = json.loads(json_str)

# 2. 执行归一化操作
df = pd.json_normalize(data=json_response['results'], meta=['id'])
# 注意:你的示例JSON里没有'name'字段,若接口实际返回也没有该字段,meta里的'name'会引发KeyError,建议删除或确认字段存在

额外注意点

  • 如果接口返回的编码不是utf-8,可以从响应头response.headers.get_content_charset()获取正确编码,替换decode()里的参数
  • 检查meta参数中的字段是否存在于返回的JSON数据中,避免不必要的KeyError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:35:26