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

提取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)

关键修正点

  1. 遍历字典的值:用 disconnect_json['categories'].values() 直接获取每个分类下的追踪器列表,而非遍历分类名称字符串。
  2. 兼容多种域名存储格式:原JSON中部分追踪器用 domain 存储单个域名,部分用 domains 数组存储多个域名,还有的在 properties 中包含关联域名,代码全部处理这些情况。
  3. 用集合去重:继续使用 set() 自动过滤重复域名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:55:16