使用返回的.json()对象作为第二个.json()对象的.format()语句的一部分

时间:2014-12-01 19:08:21

标签: python json python-requests

我使用for循环提交一系列xhr请求来改变它的参数,如下所示:

import json
import requests
import jsonobject

for i in range(0, 1): #set to 1 rather than three to making demonstration easier

    if i == 0:
        var = "0"
        var2 = "Home"
    elif i == 1:
        var = "1"
        var2 = "Away"
    elif i == 2:
        var = "2"
        var2 = "Overall"

    url = 'http://www.whoscored.com/StatisticsFeed/1/GetPlayerStatistics'
    params = {
            'category': 'tackles',
            'subcategory': 'success',
            'statsAccumulationType': '0',
            'isCurrent': 'true',
            'playerId': '',
            'teamIds': '',
            'matchId': '',
            'stageId': '9155',
            'tournamentOptions': '2',
            'sortBy': 'Rating',
            'sortAscending': '',
            'age': '',
            'ageComparisonType': '',
            'appearances': '',
            'appearancesComparisonType': '0',
            'field': var2, #parameter from for loop
            'nationality': '',
            'positionOptions': "'FW','AML','AMC','AMR','ML','MC','MR','DMC','DL','DC','DR','GK','Sub'",
            'timeOfTheGameEnd': '5',
            'timeOfTheGameStart': '0',
            'isMinApp': '',
            'page': '1',
            'includeZeroValues': '',
            'numberOfPlayersToPick': '1'
            }

    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
           'X-Requested-With': 'XMLHttpRequest',
           'Host': 'www.whoscored.com',
           'Referer': 'http://www.whoscored.com/'}

    responser = requests.get(url, params=params, headers=headers)
    responser = responser.json()
    print "responser = ",responser #contents of .json() object

    playerTableStats = responser[u'playerTableStats'] #json sub object to be parsed
    statColumns = responser[u'statColumns'][3:] #json sub object to pass to .format() statement
    statColumns = ''.join('{' + x + '}' for x in statColumns)
    print "statColumns = ",statColumns

    for statDict in playerTableStats:

        var = (statColumns.format(**statDict)) #statColumns object passed to .format() statement
        print "var = ",var

对于每个responer.json()对象,有两个嵌套组件。第一个statColumns可以用作.format()语句的一部分来映射第二个,标题为playerTableStats。所以你可以看到这段代码在做什么,这是打印的输出:

responser =  {u'statColumns': [u'apps', u'subOn', u'minsPlayed', u'tackleWonTotal', 
u'challengeLost', u'tackleTotalAttempted'], u'paging': {u'firstRecordIndex': 1, u'resultsPerPage': 1,
 u'lastRecordIndex': 1, u'totalPages': 431, u'currentPage': 1, u'totalResults': 431}, 
u'playerTableStats': [{u'positionText': u'Defender', u'rating': 8.37, u'weight': 77, u'playerId':
 22079, u'height': 188, u'teamId': 32, u'playedPositions': u'-DC-', u'challengeLost': 0.0, 
u'isManOfTheMatch': False, u'isOpta': True, u'subOn': 0, u'tackleWonTotal': 2.0,
 u'tournamentShortName': u'EPL', u'apps': 1, u'teamName': u'Manchester United', 
u'tournamentRegionId': 252, u'regionCode': u'gb-nir', u'tournamentRegionCode': u'gb-eng', 
u'playedPositionsShort': u'D(C)', u'seasonId': 4311, u'ranking': 1, u'minsPlayed': 90, 
u'tournamentName': u'Premier League', u'isActive': True, u'name': u'Jonny Evans', u'firstName': 
u'Jonny', u'lastName': u'Evans', u'age': 26, u'seasonName': u'2014/2015', u'tournamentId': 2, 
u'tackleTotalAttempted': 2.0}]}

statColumns =  {tackleWonTotal}{challengeLost}{tackleTotalAttempted}

var =  2.00.02.0

我希望看到的playerTableStats语句中打印的statColumns =元素打印为:

2.0,0.0,2.0

而不是:

2.00.02.0

......我正在接受。有人能看出我做错了吗?

由于

1 个答案:

答案 0 :(得分:2)

我还没有仔细阅读你的代码,但在我看来你应该.join使用逗号,而不是空字符串:

statColumns = ','.join('{' + x + '}' for x in statColumns)
#              ^ comma here, not empty string.

否则,您的格式语句看起来像'{minsPlayed}{tackleWonTotal}...'而不是'{minsPlayed},{tackleWonTotal},...'