Looping nested JSON object in python to collect selected fields and save to use in another request
Question:
I am trying to iterate the response from a API call but having issues collecting all the data.
I need to use the IDs with another requests call so I can get access to individual race data.
This is the code so far:
import requests
import json
def event_id_collection():
# MAKE VARIABLES GLOBAL
link = 'https://xxxxxxxx.com.au/GroupedRaceCard?format=json'
# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for races in data['Thoroughbred'][0]:
race_id = races['EventId']
venue = races['Venue']
race_no = races['RaceNumber']
print(race_id, venue, race_no)
if __name__ == "__main__":
event_id_collection()
This code returns
12085859 Randwick 1
12085861 Randwick 2
12085863 Randwick 3
12085865 Randwick 4
12085867 Randwick 5
12085869 Randwick 6
12085871 Randwick 7
12085873 Randwick 8
12085875 Randwick 9
12085877 Randwick 10
so that works ok, but I need to loop through all race meetings for the day.
[‘Thoroughbred’][0] <—- can I use a wildcard for the 0? so it loops all the race meetings? The number of races changes each day, so it can’t be any set number.
when i try to use the same code with out the [0] i get the following error
race_id = races['EventId']
TypeError: list indices must be integers or slices, not str
This is the JSON response (not all of it, just what could fit here) from the API request:
"Thoroughbred": [
[
{
"EventTypeId": 1,
"EventId": 12085859,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 1,
"AdvertisedStartTime": "2022-10-01T01:50:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -11575,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,5,7,6",
"MasterCategoryName": "Australian Racing",
"EventName": "Arrowfield Breeders' Plate",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085861,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 2,
"AdvertisedStartTime": "2022-10-01T02:25:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -9475,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "8,7,3,1",
"MasterCategoryName": "Australian Racing",
"EventName": "Keeneland Gimcrack Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085863,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 3,
"AdvertisedStartTime": "2022-10-01T03:00:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -7375,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "2,6,7,14",
"MasterCategoryName": "Australian Racing",
"EventName": "Schweppes (Bm88)",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085865,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 4,
"AdvertisedStartTime": "2022-10-01T03:35:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -5275,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,2,8,4",
"MasterCategoryName": "Australian Racing",
"EventName": "Fujitsu General Hill Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085867,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 5,
"AdvertisedStartTime": "2022-10-01T04:10:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -3175,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,4,12,2",
"MasterCategoryName": "Australian Racing",
"EventName": "Drinkwise Dulcify Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085869,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 6,
"AdvertisedStartTime": "2022-10-01T04:45:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -1075,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "3,2,4,1",
"MasterCategoryName": "Australian Racing",
"EventName": "Darley Flight Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085871,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 7,
"AdvertisedStartTime": "2022-10-01T05:25:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 1324,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Bisley Workwear Premiere Stks",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085873,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 8,
"AdvertisedStartTime": "2022-10-01T06:05:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 3724,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
},
{
"MarketType": "RC-DBL",
"DividendType": "VIC",
"EventMultipleId": 2361146,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Tab Epsom",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085875,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 9,
"AdvertisedStartTime": "2022-10-01T06:45:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 6124,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 3
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Furphy Metropolitan",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085877,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 10,
"AdvertisedStartTime": "2022-10-01T07:25:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 8524,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 4
},
{
"MarketType": "RC-DBL",
"DividendType": "VIC",
"EventMultipleId": 2361146,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Cleanaway (Bm94)",
"StateCode": "NSW"
}
],
[
{
"EventTypeId": 1,
"EventId": 12085960,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 1,
"AdvertisedStartTime": "2022-10-01T02:40:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -8575,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "7,9,10,2",
"MasterCategoryName": "Australian Racing",
"EventName": "Darley Maribyrnong Trial Stks",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12085993,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 2,
"AdvertisedStartTime": "2022-10-01T03:15:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -6475,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "7,11,9,2",
"MasterCategoryName": "Australian Racing",
"EventName": "Katherine Bourke Paris Lane",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086003,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 3,
"AdvertisedStartTime": "2022-10-01T03:50:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -4375,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,8,10,3",
"MasterCategoryName": "Australian Racing",
"EventName": "Tab Edward Manifold Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086005,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 4,
"AdvertisedStartTime": "2022-10-01T04:25:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -2275,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "8,5,7,4",
"MasterCategoryName": "Australian Racing",
"EventName": "Furphy Rose Of Kingston Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086007,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 5,
"AdvertisedStartTime": "2022-10-01T05:05:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 124,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Hq Tavern Danehill Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086009,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 6,
"AdvertisedStartTime": "2022-10-01T05:45:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 2524,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 3
},
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361133,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "The Lexus Bart Cummings",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086011,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 7,
"AdvertisedStartTime": "2022-10-01T06:25:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 4924,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 4
},
{
"MarketType": "RC-DBL",
"DividendType": "VIC",
"EventMultipleId": 2361134,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
},
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361133,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Tab Turnbull Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086013,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 8,
"AdvertisedStartTime": "2022-10-01T07:05:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 7324,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 5
},
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361133,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 3
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Gilgai Stakes",
"StateCode": "VIC"
},
]
}
this image shows the full object and all of the levels.
Answers:
Could you be looking for a nested loop:
import requests
import json
def event_id_collection():
# MAKE VARIABLES GLOBAL
link = 'https://xxxxxxxx.com.au/GroupedRaceCard?format=json'
# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for same_venue_races in data['Thoroughbred']:
for race in same_venue_races:
race_id = race['EventId']
venue = race['Venue']
race_no = race['RaceNumber']
print(race_id, venue, race_no)
if __name__ == "__main__":
event_id_collection()
The response is a list containing other lists. You need a nested loop to iterate the entire response.
for venue in data['Thoroughbred']:
for race in venue:
race_id = race['EventId']
venue = race['Venue']
race_no = race['RaceNumber']
print(race_id, venue, race_no)
You’ll need a nested loop to process all the values. Something like:
for meet_type in data:
print(meet_type)
for meeting in data[meet_type]:
print(f"{meeting[0]['MasterCategoryName']} ({meeting[0]['StateCode']})")
for races in meeting:
race_id = races['EventId']
venue = races['Venue']
race_no = races['RaceNumber']
print(race_id, venue, race_no)
Output (for the JSON in your question):
Thoroughbred
Australian Racing (NSW)
12085859 Randwick 1
12085861 Randwick 2
12085863 Randwick 3
12085865 Randwick 4
12085867 Randwick 5
12085869 Randwick 6
12085871 Randwick 7
12085873 Randwick 8
12085875 Randwick 9
12085877 Randwick 10
Australian Racing (VIC)
12085960 Flemington 1
12085993 Flemington 2
12086003 Flemington 3
12086005 Flemington 4
12086007 Flemington 5
12086009 Flemington 6
12086011 Flemington 7
12086013 Flemington 8
I am trying to iterate the response from a API call but having issues collecting all the data.
I need to use the IDs with another requests call so I can get access to individual race data.
This is the code so far:
import requests
import json
def event_id_collection():
# MAKE VARIABLES GLOBAL
link = 'https://xxxxxxxx.com.au/GroupedRaceCard?format=json'
# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for races in data['Thoroughbred'][0]:
race_id = races['EventId']
venue = races['Venue']
race_no = races['RaceNumber']
print(race_id, venue, race_no)
if __name__ == "__main__":
event_id_collection()
This code returns
12085859 Randwick 1
12085861 Randwick 2
12085863 Randwick 3
12085865 Randwick 4
12085867 Randwick 5
12085869 Randwick 6
12085871 Randwick 7
12085873 Randwick 8
12085875 Randwick 9
12085877 Randwick 10
so that works ok, but I need to loop through all race meetings for the day.
[‘Thoroughbred’][0] <—- can I use a wildcard for the 0? so it loops all the race meetings? The number of races changes each day, so it can’t be any set number.
when i try to use the same code with out the [0] i get the following error
race_id = races['EventId']
TypeError: list indices must be integers or slices, not str
This is the JSON response (not all of it, just what could fit here) from the API request:
"Thoroughbred": [
[
{
"EventTypeId": 1,
"EventId": 12085859,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 1,
"AdvertisedStartTime": "2022-10-01T01:50:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -11575,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,5,7,6",
"MasterCategoryName": "Australian Racing",
"EventName": "Arrowfield Breeders' Plate",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085861,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 2,
"AdvertisedStartTime": "2022-10-01T02:25:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -9475,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "8,7,3,1",
"MasterCategoryName": "Australian Racing",
"EventName": "Keeneland Gimcrack Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085863,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 3,
"AdvertisedStartTime": "2022-10-01T03:00:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -7375,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "2,6,7,14",
"MasterCategoryName": "Australian Racing",
"EventName": "Schweppes (Bm88)",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085865,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 4,
"AdvertisedStartTime": "2022-10-01T03:35:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -5275,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,2,8,4",
"MasterCategoryName": "Australian Racing",
"EventName": "Fujitsu General Hill Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085867,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 5,
"AdvertisedStartTime": "2022-10-01T04:10:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -3175,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,4,12,2",
"MasterCategoryName": "Australian Racing",
"EventName": "Drinkwise Dulcify Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085869,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 6,
"AdvertisedStartTime": "2022-10-01T04:45:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -1075,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "3,2,4,1",
"MasterCategoryName": "Australian Racing",
"EventName": "Darley Flight Stakes",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085871,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 7,
"AdvertisedStartTime": "2022-10-01T05:25:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 1324,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Bisley Workwear Premiere Stks",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085873,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 8,
"AdvertisedStartTime": "2022-10-01T06:05:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 3724,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
},
{
"MarketType": "RC-DBL",
"DividendType": "VIC",
"EventMultipleId": 2361146,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Tab Epsom",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085875,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 9,
"AdvertisedStartTime": "2022-10-01T06:45:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 6124,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 3
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Furphy Metropolitan",
"StateCode": "NSW"
},
{
"EventTypeId": 1,
"EventId": 12085877,
"VenueId": 130,
"Venue": "Randwick",
"CountryCode": "AUS",
"RaceNumber": 10,
"AdvertisedStartTime": "2022-10-01T07:25:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 8524,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361145,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 4
},
{
"MarketType": "RC-DBL",
"DividendType": "VIC",
"EventMultipleId": 2361146,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Cleanaway (Bm94)",
"StateCode": "NSW"
}
],
[
{
"EventTypeId": 1,
"EventId": 12085960,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 1,
"AdvertisedStartTime": "2022-10-01T02:40:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -8575,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "7,9,10,2",
"MasterCategoryName": "Australian Racing",
"EventName": "Darley Maribyrnong Trial Stks",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12085993,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 2,
"AdvertisedStartTime": "2022-10-01T03:15:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -6475,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "7,11,9,2",
"MasterCategoryName": "Australian Racing",
"EventName": "Katherine Bourke Paris Lane",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086003,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 3,
"AdvertisedStartTime": "2022-10-01T03:50:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -4375,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [],
"Results": "1,8,10,3",
"MasterCategoryName": "Australian Racing",
"EventName": "Tab Edward Manifold Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086005,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 4,
"AdvertisedStartTime": "2022-10-01T04:25:00.0000000Z",
"ResultStatusId": 2,
"SecondsToJump": -2275,
"HasFixedMarkets": true,
"IsOpenForBetting": false,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "8,5,7,4",
"MasterCategoryName": "Australian Racing",
"EventName": "Furphy Rose Of Kingston Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086007,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 5,
"AdvertisedStartTime": "2022-10-01T05:05:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 124,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Hq Tavern Danehill Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086009,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 6,
"AdvertisedStartTime": "2022-10-01T05:45:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 2524,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 3
},
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361133,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "The Lexus Bart Cummings",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086011,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 7,
"AdvertisedStartTime": "2022-10-01T06:25:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 4924,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 4
},
{
"MarketType": "RC-DBL",
"DividendType": "VIC",
"EventMultipleId": 2361134,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 1
},
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361133,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 2
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Tab Turnbull Stakes",
"StateCode": "VIC"
},
{
"EventTypeId": 1,
"EventId": 12086013,
"VenueId": 356,
"Venue": "Flemington",
"CountryCode": "AUS",
"RaceNumber": 8,
"AdvertisedStartTime": "2022-10-01T07:05:00.0000000Z",
"ResultStatusId": 0,
"SecondsToJump": 7324,
"HasFixedMarkets": true,
"IsOpenForBetting": true,
"MarketShortcuts": [
{
"MarketType": "RC-GIANT6",
"DividendType": "VIC",
"EventMultipleId": 2361130,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 5
},
{
"MarketType": "RC-QUADDIE",
"DividendType": "VIC",
"EventMultipleId": 2361133,
"IsSelected": false,
"EventTypeId": 0,
"LegNumber": 3
}
],
"Results": "",
"MasterCategoryName": "Australian Racing",
"EventName": "Gilgai Stakes",
"StateCode": "VIC"
},
]
}
this image shows the full object and all of the levels.
Could you be looking for a nested loop:
import requests
import json
def event_id_collection():
# MAKE VARIABLES GLOBAL
link = 'https://xxxxxxxx.com.au/GroupedRaceCard?format=json'
# Request data from link as 'str'
data = requests.get(link).text
# convert 'str' to Json
data = json.loads(data)
# JSON PARSE
for same_venue_races in data['Thoroughbred']:
for race in same_venue_races:
race_id = race['EventId']
venue = race['Venue']
race_no = race['RaceNumber']
print(race_id, venue, race_no)
if __name__ == "__main__":
event_id_collection()
The response is a list containing other lists. You need a nested loop to iterate the entire response.
for venue in data['Thoroughbred']:
for race in venue:
race_id = race['EventId']
venue = race['Venue']
race_no = race['RaceNumber']
print(race_id, venue, race_no)
You’ll need a nested loop to process all the values. Something like:
for meet_type in data:
print(meet_type)
for meeting in data[meet_type]:
print(f"{meeting[0]['MasterCategoryName']} ({meeting[0]['StateCode']})")
for races in meeting:
race_id = races['EventId']
venue = races['Venue']
race_no = races['RaceNumber']
print(race_id, venue, race_no)
Output (for the JSON in your question):
Thoroughbred
Australian Racing (NSW)
12085859 Randwick 1
12085861 Randwick 2
12085863 Randwick 3
12085865 Randwick 4
12085867 Randwick 5
12085869 Randwick 6
12085871 Randwick 7
12085873 Randwick 8
12085875 Randwick 9
12085877 Randwick 10
Australian Racing (VIC)
12085960 Flemington 1
12085993 Flemington 2
12086003 Flemington 3
12086005 Flemington 4
12086007 Flemington 5
12086009 Flemington 6
12086011 Flemington 7
12086013 Flemington 8