将HTTPResponse对象转换为字典

4 投票
1 回答
14652 浏览
提问于 2025-04-18 08:56

我想把这个对象变成我可以在程序中使用的东西。我需要把消息的ID存储到数据库里。除了直接解析它,我能不能把整个东西变成一个字典呢?

这是我在IDLE测试中得到的结果:

>>> response = urllib.request.urlopen(req)
>>> response.getheaders()
[('Server', 'nginx/1.6.0'), ('Date', 'Sat, 07 Jun 2014 00:32:45 GMT'), ('Content-Type', 'application/json;charset=ISO-8859-1'), ('Transfer-Encoding', 'chunked'), ('Connection', 'close'), ('Cache-Control', 'max-age=1')]
>>> response.read()
b'{"message-count":"1","messages":[{"to":"11234567890","message-id":"02000000300D8F21","status":"0","remaining-balance":"1.82720000","message-price":"0.00620000","network":"302220"}]}'

经过半个小时在谷歌上查找,我终于把它变成了一个字符串:

>>> response.response.decode('utf-8')
>>> print(response)
'{"message-count":"1","messages":[{"to":"11234567890","message-id":"02000000300D8F21","status":"0","remaining-balance":"1.82720000","message-price":"0.00620000","network":"302220"}]}'
>>> type(response)
<class 'str'>

我找到了一篇帖子,但是我得到的结果是:

>>> a_dict = dict([response.strip('{}').split(":"),])
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
  a_dict = dict([response.strip('{}').split(":"),])
ValueError: dictionary update sequence element #0 has length 9; 2 is required

也许我这样做的方法不对。有没有更快的方法把这个对象变成字典,或者其他我能轻松处理的东西?

1 个回答

6

通过 json.load() 来加载它:

import json
response = urllib.request.urlopen(req)
result = json.loads(response.readall().decode('utf-8'))
message_id = result['messages'][0]['message-id']

撰写回答