Amar Amar - 2 months ago 8
Python Question

Extract data from JSON in python

Can I access link inside

next
from the below
Json
data? I am doing in this way

data = json.loads(html.decode('utf-8'))
for i in data['comments']:
for h in i['paging']:
print(h)
{


Because
comments
is a main object. Inside the
comments
there are three sub objects
data
,
paging
and
summary
. The above code is doing the same , inside
comments
, because of
paging
is an object of multiple other objects, in the loop and print that. It is giving the error


for h in i['paging']:
TypeError: string indices must be integers


"comments": {
"data": [
{
"created_time": "2016-05-22T14:57:04+0000",
"from": {
"id": "908005352638687",
"name": "Marianela Ferrer"
},
"id": "101536081674319615443",
"message": "I love the way you talk! I can not get enough of your voice. I'm going to buy Seveneves! I'm going to read it this week. Thanks again se\u00f1or Gates. I hope you have a beautiful day:-)"
}
],
"paging": {
"cursors": {
"after": "NzQ0",
"before": "NzQ0"
},
"next": "https://graph.facebook.com/v2.7/10153608167431961/comments?access_token=xECxPrxuXbaRqcippFcrwZDZD&summary=true&limit=1&after=NzQ0"
},
"summary": {
"can_comment": true,
"order": "ranked",
"total_count": 744
}
},
"id": "10153608167431961"
}

Answer

You're iterating through "comments" which results in three objects: data, paging, and summary. All you want is paging, but your first for-loop wants you to go through all the others.

Thus, when it starts with data, you're trying to call data['paging'], but this doesn't work because data's value is a list and not a dictionary.

You want to immediately access paging:

print data['comments']['paging']['next']