我正在尝试从所有类别下的Disconnect.json文件中提取所有唯一域的列表。这是我使用的json文件的链接。https://github.com/disconnectme/disconnect-tracking-protection/blob/master/services.json
下面是我的Python代码:
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 category in disconnect_json['categories']:
for tracker in category['trackers']:
disconnect_domains.add(tracker['domain'])
return disconnect_domains
disconnect_domains = get_disconnect_domains('disconnect.json')
(我将文件保存为disconnect.json)但我一直遇到这个错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-1e2723fa469d> in <cell line: 14>()
12
13 # Get the list of all unique domains from the disconnect.json file
---> 14 disconnect_domains = get_disconnect_domains('services.json')
15
16 # Print the list of all unique domains
<ipython-input-24-1e2723fa469d> in get_disconnect_domains(disconnect_json_file)
6 disconnect_json = json.load(f)
7 for category in disconnect_json['categories']:
----> 8 for tracker in category['trackers']:
9 disconnect_domains.add(tracker['domain'])
10
TypeError: string indices must be integers
我通常不使用Python,所以我不确定到底是哪里出了问题。有人能帮帮忙吗?
2条答案
按热度按时间mdfafbf11#
这些域在JSON结构中嵌套得相当深。你可以这样访问它们:
t3psigkw2#
您遇到的错误消息“
TypeError: string indices must be integers
”表明您正在尝试使用字符串索引访问字符串,就好像它是字典一样,这在Python中是不允许的。这个问题很可能与您试图解析的JSON文件的结构有关。要访问JSON文件中的元素,在处理对象时应该使用字典式索引(带键),在处理数组时应该使用列表式索引(带整数)。
在您的示例中,发生错误是因为您将字符串视为字典。要解决此问题,您需要根据JSON中的对象类型正确浏览JSON结构。
以下是正确导航JSON结构的代码的更新版本:
这段代码假设JSON文件包含一个带有“trackers”键的对象数组,每个tracker对象都有一个“domain”键。它相应地导航JSON结构并提取唯一域。
确保“services.json”文件的JSON结构与此代码中的假设相匹配。如果JSON的结构不同,则需要相应地调整代码。