提取Disconnect.json唯一域名时遇TypeError错误求助
问题分析与解决方案
错误原因
你的代码报错是因为对目标JSON文件的结构理解有误:
disconnect_json['categories']是一个字典,而非列表。直接遍历它会得到分类名称的字符串(比如"Advertising")。- 你尝试对字符串执行
category['trackers'],这必然触发TypeError——字符串的索引只能是整数,不能用字符串键。 - 另外,原JSON中不存在
trackers这个键,每个分类对应的字典值就是该分类下的追踪器列表。
修正后的代码
以下代码会正确提取所有唯一域名(包括单个域名、域名数组,以及追踪器关联的属性域名):
import json def get_disconnect_domains(disconnect_json_file): disconnect_domains = set() with open(disconnect_json_file, 'r') as f: disconnect_json = json.load(f) # 遍历所有分类下的追踪器列表 for trackers in disconnect_json['categories'].values(): for tracker in trackers: # 处理单个域名的情况 if 'domain' in tracker: disconnect_domains.add(tracker['domain']) # 处理多个域名的数组情况 if 'domains' in tracker: disconnect_domains.update(tracker['domains']) # 处理追踪器关联的属性域名(可选,按需保留) if 'properties' in tracker: disconnect_domains.update(tracker['properties']) return disconnect_domains # 调用函数并获取结果 disconnect_domains = get_disconnect_domains('disconnect.json') # 可选:打印排序后的域名列表 for domain in sorted(disconnect_domains): print(domain)
关键修正点
- 遍历字典的值:用
disconnect_json['categories'].values()直接获取每个分类下的追踪器列表,而非遍历分类名称字符串。 - 兼容多种域名存储格式:原JSON中部分追踪器用
domain存储单个域名,部分用domains数组存储多个域名,还有的在properties中包含关联域名,代码全部处理这些情况。 - 用集合去重:继续使用
set()自动过滤重复域名。
内容的提问来源于stack exchange,提问作者Ariha
相关产品推荐
相关产品推荐

