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

Python处理请求JSON转DataFrame报TypeError: string indices must be integers

错误根因

你代码中iot_trimmed的实际类型是JSON格式的字符串,并非Python字典,因此无法直接通过键名['default']做索引,触发string indices must be integers报错。
你打印的iot_trimmed内容只是JSON格式的字符串字面量,和Python可直接操作的字典是完全不同的数据类型。

修复步骤
  1. 对切割后的iot_trimmed字符串做JSON反序列化,转成Python字典后再提取字段
  2. 顺便补充你代码末尾apply行遗漏的右括号,避免后续语法报错
修复后的核心代码片段
import json
import pandas as pd
import requests

# 你之前的请求代码保持不变
over_time_req_payload = {
    'req': json.dumps(interest_over_time_widget['request']),
    'token': interest_over_time_widget['token'],
    'tz': timezone
}

req_json_interest_over_time = requests.get(interest_over_time_url,
                    params=over_time_req_payload,
                    cookies=cookies,
                    headers={'accept-language': 'us'})

iot_trimmed = req_json_interest_over_time.text[len(data_trim):]
# 新增:将JSON字符串反序列化为Python字典
iot_dict = json.loads(iot_trimmed)
# 用反序列化后的字典取字段
df = pd.DataFrame(iot_dict['default']['timelineData'])
df['date'] = pd.to_datetime(df['time'].astype(dtype='float64'), unit='s')
df = df.set_index(['date']).sort_index()
# 补充了末尾缺失的右括号
result_df = df['value'].apply(lambda x: pd.Series( str(x).replace('[', '').replace(']', '').split(',')))
验证方法

你可以在切割完iot_trimmed后加一行打印类型的代码确认:

print(type(iot_trimmed)) # 输出会是<class 'str'>,验证是字符串类型
print(type(iot_dict)) # 反序列化后输出为<class 'dict'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:18:00