[英]JSON feed with unique IDs referenced using Python
我正在使用Python解析JSON feed。 JSON提要每30秒左右更新一次。 我需要從對戰游戲中提取信息,但是對戰游戲ID的唯一ID節點在每個游戲上都會發生變化。
我已經可以通過硬編碼uniqueID來解析所需的數據,但是當新游戲進入Feed時,我將不知道UniqueID是什么,因此代碼將失敗。
下面的代碼確實有效,但是我需要一種查找或通配符(我知道直接在Python中是不可能的)唯一ID 1572805的方法。
import urllib2, cookielib, json, io
import datetime
url = "JSON URL - REMOVED"
sportsFeed = r"c:\feeds\results.txt"
try:
scorepro = urllib2.urlopen(url)
wjson = scorepro.read()
wjdata = json.loads(wjson)
today = str(datetime.datetime.today().strftime('%Y-%m-%d'))
playerone = wjdata['list']['Sport']['2']['Matchday'][today]['Match']['1572805']['Home']['name']
print "playerone = " + playerone
except:
print "error"
以下是JSON的摘錄,您可以在其中看到每個游戲的數據都有一個新的uniqueID:-
"timestamp":1530275075969,
"list":{
"Sport":{
"2":{
"id":"2",
"name":"TENNIS",
"code":"TEN",
"hid":"6268717",
"Matchday":{
"2018-06-28":{
"date":"2018-06-28",
"Match":{
"1572805":{
"ct":0,
"id":"1572805",
"lastPeriod":"Set4",
"leagueCode":"43548",
"leagueSort":0,
"leagueType":"Tournament",
"startTime":"10:05",
"status":"Fin",
"statustype":"fin",
"type":2,
"visible":"1",
"Home":{
"id":"43095",
"name":"BOLT A. (AUS)",
"serve":"1",
"seed":"",
"standing":""
},
"Away":{
"id":"43035",
"name":"KOKKINAKIS T. (AUS)",
"serve":"0",
"seed":"",
"standing":""
},
"Results":{
"1":{
"id":"1",
"name":"CURRENT",
"value":"3-1"
},
"Period":{
"1":{
"id":1,
"name":"S1",
"detail":"SCORE",
"value":"7-6",
"tiebreak":"8-6"
},
"2":{
"id":2,
"name":"S2",
"detail":"SCORE",
"value":"7-6",
"tiebreak":"7-4"
},
"3":{
"id":3,
"name":"S3",
"detail":"SCORE",
"value":"4-6",
"tiebreak":""
},
"4":{
"id":4,
"name":"S4",
"detail":"SCORE",
"value":"7-5",
"tiebreak":""
},
"5":{
"id":5,
"name":"S5",
"detail":"SCORE",
"value":"0-0",
"tiebreak":""
}
}
},
"Information":{
"season":{
"id":"364",
"name":"2018"
},
"country":{
"id":"61738",
"name":"ATP SINGLES"
},
"league":{
"id":"43548",
"name":"WIMBLEDON"
},
"shortName":"ATP-S",
"round":"QR32",
"note":"",
"bitArray":"",
"timestamp":""
}
},
"1572811":{
"ct":0,
"id":"1572811",
"lastPeriod":"Set4",
"leagueCode":"43548",
"leagueSort":0,
"leagueType":"Tournament",
"startTime":"10:05",
"status":"Fin",
"statustype":"fin",
"type":2,
"visible":"1",
"Home":{
"id":"16910",
"name":"ROBERT S. (FRA)",
"serve":"0",
"seed":"",
"standing":""
},
"Away":{
"id":"47867",
"name":"VANNI L. (ITA)",
"serve":"1",
"seed":"",
"standing":""
},
"Results":{
"1":{
"id":"1",
"name":"CURRENT",
"value":"3-1"
},
"Period":{
"1":{
"id":1,
"name":"S1",
"detail":"SCORE",
"value":"6-4",
"tiebreak":""
},
"2":{
"id":2,
"name":"S2",
"detail":"SCORE",
"value":"3-6",
"tiebreak":""
},
"3":{
"id":3,
"name":"S3",
"detail":"SCORE",
"value":"7-5",
"tiebreak":""
},
"4":{
"id":4,
"name":"S4",
"detail":"SCORE",
"value":"6-1",
"tiebreak":""
},
"5":{
"id":5,
"name":"S5",
"detail":"SCORE",
"value":"0-0",
"tiebreak":""
}
}
},
"Information":{
"season":{
"id":"364",
"name":"2018"
},
"country":{
"id":"61738",
"name":"ATP SINGLES"
},
"league":{
"id":"43548",
"name":"WIMBLEDON"
},
"shortName":"ATP-S",
"round":"QR32",
"note":"",
"bitArray":"",
"timestamp":""
}
},
"1572826":{
"ct":0,
"id":"1572826",
"lastPeriod":"Set4",
"leagueCode":"43548",
"leagueSort":0,
"leagueType":"Tournament",
"startTime":"10:05",
"status":"Fin",
"statustype":"fin",
"type":2,
"visible":"1",
"Home":{
"id":"44005",
"name":"WARD J. (GBR)",
"serve":"1",
"seed":"",
"standing":""
},
"Away":{
"id":"55639",
"name":"BONZI B. (FRA)",
"serve":"0",
"seed":"",
"standing":""
},
"Results":{
"1":{
"id":"1",
"name":"CURRENT",
"value":"1-3"
},
"Period":{
"1":{
"id":1,
"name":"S1",
"detail":"SCORE",
"value":"4-6",
"tiebreak":""
},
"2":{
"id":2,
"name":"S2",
"detail":"SCORE",
"value":"2-6",
"tiebreak":""
},
"3":{
"id":3,
"name":"S3",
"detail":"SCORE",
"value":"6-1",
"tiebreak":""
},
"4":{
"id":4,
"name":"S4",
"detail":"SCORE",
"value":"0-6",
"tiebreak":""
},
"5":{
"id":5,
"name":"S5",
"detail":"SCORE",
"value":"0-0",
"tiebreak":""
}
}
},
"Information":{
"season":{
"id":"364",
"name":"2018"
},
"country":{
"id":"61738",
"name":"ATP SINGLES"
},
"league":{
"id":"43548",
"name":"WIMBLEDON"
},
"shortName":"ATP-S",
"round":"QR32",
"note":"",
"bitArray":"",
"timestamp":""
}
},
如何重新創建代碼,以便可以查找所有uniqueID,然后能夠使用這些預定義的uniqueID解析JSON?
謝謝。
使用以下代碼來解析JSON中的ID,每次將鍵#遞增1,例如:
id = wjdata['list']['Sport']['2']['Matchday'][today]['Match'].keys()[0]
playerone = wjdata['list']['Sport']['2']['Matchday'][today]['Match'][id]['Home']['name']
id = wjdata['list']['Sport']['2']['Matchday'][today]['Match'].keys()[1]
playerone = wjdata['list']['Sport']['2']['Matchday'][today]['Match'][id]['Home']['name']
使用Match
dict並遍歷所有匹配項。
import urllib2, cookielib, json, io
import datetime
url = "JSON URL - REMOVED"
sportsFeed = r"c:\feeds\results.txt"
try:
scorepro = urllib2.urlopen(url)
wjson = scorepro.read()
wjdata = json.loads(wjson)
today = str(datetime.datetime.today().strftime('%Y-%m-%d'))
matches = wjdata['list']['Sport']['2']['Matchday'][today]['Match']
for id, match in matches.items():
player_name = match['Home']['name']
print "player = " + player_name
except:
print "error"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.