从python中的请求查询结果中提取json字段

时间:2016-04-07 09:43:47

标签: python json python-requests

如何从以下代码的结果中提取特定字段??

payload = {'token': 'XXXXXXXX', 'channel': 'C0L8MGLMN' , 'count': '10'}
r = requests.get('https://slack.com/api/channels.history', params=payload)
print r.status_code
pprint(r.json())

print "---------------------------"
k = r.json()
print "Now printing some cool stuff"
response_dict = json.loads(k)
response_dict['text']

这导致:

200
{u'has_more': False,
 u'is_limited': True,
 u'messages': [{u'text': u'This is not a test!',
                u'ts': u'1459763505.000003',
                u'type': u'message',
                u'user': u'U03FE3Z7D'},
               {u'subtype': u'bot_message',
                u'text': u'This is a test!',
                u'ts': u'1459750060.000002',
                u'type': u'message',
                u'username': u'facsimile_test'}],
 u'ok': True}
---------------------------
Now printing some cool stuff
Traceback (most recent call last):
  File "clean_SLACK.py", line 17, in <module>
    response_dict = json.loads(k)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer

我无法提取文字或用户等字段。

1 个答案:

答案 0 :(得分:3)

Response.json返回一个json解码的对象。只需使用k作为python对象:

k = r.json()
print "Now printing some cool stuff"
for msg in k['messages']:
    print msg['text']