xavier
xavier

Reputation: 816

TypeError: list indices must be integers or slices, not str while parsing JSON

I am trying to print out at least one key value from the returned Json, as following this basic tutorial

response=None    
booking_source = 'sourceBusinessName'
api_request ='http://api.com'
r = requests.get(api_request)
while response is None:
    response = r.content.decode('utf-8')
    data = json.loads(response)
    print (data[booking_source])
    return HttpResponse(data[booking_source])

But it returns TypeError: list indices must be integers or slices, not str probably because I am giving an string instead of an integer to data when printing, but then what I am doing wrong here ?

Upvotes: 1

Views: 1706

Answers (2)

mhawke
mhawke

Reputation: 87084

With requests you can skip the decoding of the response and parsing it as JSON by using the response's json method:

r = requests.get(api_request)
data = r.json()
print data    # so you can see what you're dealing with

At this point I suggest dumping out the value of data so that you can see the structure of the JSON data. Probably it is a JSON array (converted to a Python list) and you simply need to take the first element of that array before accessing the dictionary, but it's difficult to tell without seeing the actual data. You might like to add a sample of the data to your question.

Upvotes: 2

Alex Taylor
Alex Taylor

Reputation: 8813

Your JSON is an array at the top level, but you're trying to address it as if it were:

{
  "sourceBusinessName": {
    ...
  },
  ...
}

Upvotes: 0

Related Questions