解码带有多个“ for”循环的嵌套JSON


问题内容

我是Python的新手(上周),已经达到极限。我花了三天时间,大部分时间都在stackoverflow上,但是我不知道该怎么做!

所述的Json具有多个嵌套的数组。它可能包含三个(如下面的示例(json.txt)所示)或30。我需要遍历每个循环,然后向下钻取到“局”,最后获得“检票口”的价值。这是我感到困惑的最后一步。有人可以建议吗?

你们在绝望中

import os, json,requests
print 'Starting'
url = 'https://dl.dropboxusercontent.com/u/3758695/json.txt'

# download the json string
json_string = requests.get(url)
print 'Downloaded json'

# get the content
the_data = json_string.json()
print 'the_data has length ', len(the_data)
for index in range(len(the_data)):
    print 'Now working on index ', index
    for wicket in the_data[index]:
            print 'wicket equals ',wicket
                    # OK - I can see Innings. Now, how do I get inside
                    # and obtain 'wickets'?

问题答案:

首先,不要使用索引,而是 直接
在列表上循环;这样您就可以给他们起有意义的名字。顶层是条目列表,每个条目是带有'innings'键的字典,每个条目都是字典innings的列表,其中包括wickets键:

for entry in data:
    for inning in entry['innings']:
        print inning['wickets']

打印:

>>> for entry in data:
...     for inning in entry['innings']:
...         print inning['wickets']
... 
10
9
0
0

这也使得在每个级别添加信息变得更加容易:

>>> for entry in data:
...     print entry['description']
...     for i, inning in enumerate(entry['innings']):
...         print 'Innings {}: {} wickets'.format(i + 1, inning['wickets'])
... 
Rest of Sri Lanka v Sri Lanka A at Pallekele, May 14, 2013
Innings 1: 10 wickets
Innings 2: 9 wickets
63rd match: Royal Challengers Bangalore v Kings XI Punjab at Bangalore, May 14, 2013
Innings 1: 0 wickets
Innings 2: 0 wickets
64th match: Chennai Super Kings v Delhi Daredevils at Chennai, May 14, 2013