如何让urllib2返回数组数据

1 投票
2 回答
1231 浏览
提问于 2025-04-17 23:39

我不确定这是否可能,但如果可以的话,那就太棒了。

我的代码是:

url = "https://*myDomain*.zendesk.com/api/v2/organizations/*{id}*/tags.json"
req = urllib2.request(url)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, url, 'example@domain.com', 'password')
auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)
urllib2.install_opener(opener)
response = urllib2.urlopen(req)
tagsA = response.read()
print tagsA

现在返回的数据是:

{"tags":[]}

这个API调用本身返回了以下内容:

{
tags: []
}

但是尝试访问这个列表时却不成功,因为它似乎把tagsA当成了一个字符串。我希望它能把它当成一个列表,这样我就可以检查'tags'是否为空。

任何帮助都会非常感激!!!

2 个回答

0

你需要用 json.load(或者 json.loads)来处理响应的内容。

不过,如果你打算在Python中进行一些稍微复杂的HTTP请求(比如需要登录、处理cookies等),那么你真的应该使用Kenneth Reitz开发的非常棒的Requests库,而不是用urllib。这样,你的代码就会变成:

import requests
response = requests.get(url, auth=("my_username", "my_password"))
tagsA = response.json()
2

你需要通过 json.loads() 把 json 字符串加载到 Python 字典里:

import json

...

tagsA = json.loads(response.read())
print tagsA['tags']

或者,可以把 response 传给 json.load() (感谢 @J.F. Sebastian 的评论):

tagsA = json.load(response)
print tagsA['tags']

撰写回答