Nishant Singh
Nishant Singh

Reputation: 3209

Extract a json field from request query result in python

How to extract a particular field from the result of the following code??

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']

This results in :

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

I am not able to extract the fields like text or user etc.

Upvotes: 3

Views: 3810

Answers (1)

falsetru
falsetru

Reputation: 368944

Response.json returns an object that is json decoded. Just use k as a python object:

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

Upvotes: 4

Related Questions