#include <ArduinoJson.h>
char const * const json_string = R"RAW({"Successful":true,"Session":{"RunNumber":"75","SessionName":"Race 2-Sanction #15-RQ-3609-S","TrackName":"Laguna Seca","TrackLength":"2.238","CurrentTime":"15:12:26","SessionTime":"00:20:34","TimeToGo":"00:00:00","LapsToGo":"9999","FlagStatus":"Green","SortMode":"race","Classes":{"1":{"ClassID":"1","Description":"P1"},"2":{"ClassID":"2","Description":"FA"},"3":{"ClassID":"3","Description":"FB"},"4":{"ClassID":"4","Description":"FE"},"5":{"ClassID":"5","Description":"FM"},"6":{"ClassID":"6","Description":"FS"}},"Competitors":{"2":{"RacerID":"2","Number":"2","Transponder":"1576590","FirstName":"Cabot","LastName":"Bigham","Nationality":"Black","AdditionalData":"Keckracing","ClassID":"2","Position":"4","Laps":"13","TotalTime":"00:19:49.245","BestPosition":"2","BestLap":"11","BestLapTime":"00:01:26.891","LastLapTime":"00:01:27.879"},"3":{"RacerID":"3","Number":"3","Transponder":"356382","FirstName":"Matthew","LastName":"Hauff","Nationality":"Silver/Ylw","AdditionalData":"Goebel construction","ClassID":"4","Position":"7","Laps":"13","TotalTime":"00:20:05.038","BestPosition":"11","BestLap":"13","BestLapTime":"00:01:30.320","LastLapTime":"00:01:30.320"},"4":{"RacerID":"4","Number":"4","Transponder":"481398","FirstName":"Nicholas","LastName":"Woodman","Nationality":"Blue/Silver","AdditionalData":"GoPro","ClassID":"2","Position":"11","Laps":"12","TotalTime":"00:19:23.358","BestPosition":"8","BestLap":"11","BestLapTime":"00:01:28.407","LastLapTime":"00:01:28.782"},"6":{"RacerID":"6","Number":"6","Transponder":"3447876","FirstName":"Hunter","LastName":"Pickett","Nationality":"white/black/red","AdditionalData":"Muscle Milk/ Flavor Insights","ClassID":"2","Position":"5","Laps":"13","TotalTime":"00:19:54.575","BestPosition":"5","BestLap":"7","BestLapTime":"00:01:27.447","LastLapTime":"00:01:27.758"},"7":{"RacerID":"7","Number":"7","Transponder":"8308801","FirstName":"Rod","LastName":"Rice","Nationality":"Red","AdditionalData":"","ClassID":"3","Position":"23","Laps":"5","TotalTime":"00:07:20.586","BestPosition":"3","BestLap":"2","BestLapTime":"00:01:26.970","LastLapTime":"00:01:29.475"},"8":{"RacerID":"8","Number":"8","Transponder":"2530254","FirstName":"John","LastName":"Yeatman","Nationality":"Red/Silver","AdditionalData":"Bulldog Motorsport/Gold Hill Racing","ClassID":"4","Position":"8","Laps":"13","TotalTime":"00:20:11.735","BestPosition":"15","BestLap":"5","BestLapTime":"00:01:32.171","LastLapTime":"00:01:32.406"},"9":{"RacerID":"9","Number":"9","Transponder":"1605032","FirstName":"Ritchie","LastName":"Hollingsworth","Nationality":"Red","AdditionalData":" White","ClassID":"5","Position":"18","Laps":"12","TotalTime":"00:20:14.990","BestPosition":"21","BestLap":"12","BestLapTime":"00:01:34.782","LastLapTime":"00:01:34.782"},"18":{"RacerID":"18","Number":"18","Transponder":"124642","FirstName":"John","LastName":"Manfroy","Nationality":"Orange/Silver","AdditionalData":"Kevin Mitz Motorsports","ClassID":"1","Position":"25","Laps":"","TotalTime":"00:00:00","BestPosition":"25","BestLap":"0","BestLapTime":"00:00:00","LastLapTime":""},"20":{"RacerID":"20","Number":"20","Transponder":"88949","FirstName":"John","LastName":"Ertel","Nationality":"Blue","AdditionalData":"","ClassID":"5","Position":"19","Laps":"12","TotalTime":"00:20:16.178","BestPosition":"22","BestLap":"7","BestLapTime":"00:01:35.748","LastLapTime":"00:01:36.621"},"21":{"RacerID":"21","Number":"21","Transponder":"100395","FirstName":"Graham","LastName":"Rankin","Nationality":"Black","AdditionalData":"","ClassID":"2","Position":"24","Laps":"1","TotalTime":"00:02:26.530","BestPosition":"24","BestLap":"1","BestLapTime":"00:01:37.053","LastLapTime":"00:01:37.053"},"22":{"RacerID":"22","Number":"22","Transponder":"4728806","FirstName":"James","LastName":"Paul","Nationality":"White","AdditionalData":"Bulldog Motorsports","ClassID":"1","Position":"2","Laps":"13","TotalTime":"00:19:22.402","BestPosition":"6","BestLap":"4","BestLapTime":"00:01:27.871","LastLapTime":"00:01:28.481"},"23":{"RacerID":"23","Number":"23","Transponder":"4200578","FirstName":"Jim","LastName":"Devenport","Nationality":"white/red","AdditionalData":"Cranbrook Group","ClassID":"1","Position":"1","Laps":"14","TotalTime":"00:19:47.897","BestPosition":"1","BestLap":"10","BestLapTime":"00:01:21.522","LastLapTime":"00:01:24.758"},"24":{"RacerID":"24","Number":"24","Transponder":"9259811","FirstName":"Michael","LastName":"Avansino","Nationality":"Gray","AdditionalData":"VMB Driver Development and World Speed Motorsport","ClassID":"2","Position":"15","Laps":"12","TotalTime":"00:19:41.952","BestPosition":"13","BestLap":"11","BestLapTime":"00:01:31.816","LastLapTime":"00:01:32.122"},"25":{"RacerID":"25","Number":"25","Transponder":"6233098","FirstName":"Frank","LastName":"Cusack","Nationality":"Silver/red","AdditionalData":"","ClassID":"2","Position":"17","Laps":"12","TotalTime":"00:19:51.477","BestPosition":"18","BestLap":"11","BestLapTime":"00:01:33.273","LastLapTime":"00:01:34.602"},"28":{"RacerID":"28","Number":"28","Transponder":"731513","FirstName":"Stew","LastName":"Tabak","Nationality":"Purple","AdditionalData":"Tabak Law Firm","ClassID":"5","Position":"16","Laps":"12","TotalTime":"00:19:50.323","BestPosition":"19","BestLap":"11","BestLapTime":"00:01:33.583","LastLapTime":"00:01:34.296"},"32":{"RacerID":"32","Number":"32","Transponder":"5277126","FirstName":"Edd","LastName":"Ozard","Nationality":"Black","AdditionalData":"PacWest Solutions","ClassID":"2","Position":"10","Laps":"13","TotalTime":"00:20:22.153","BestPosition":"7","BestLap":"12","BestLapTime":"00:01:28.347","LastLapTime":"00:01:28.852"},"38":{"RacerID":"38","Number":"38","Transponder":"2063388","FirstName":"Jim","LastName":"Mali","Nationality":"Blue","AdditionalData":"","ClassID":"2","Position":"9","Laps":"13","TotalTime":"00:20:21.676","BestPosition":"10","BestLap":"10","BestLapTime":"00:01:28.801","LastLapTime":"00:01:29.167"},"40":{"RacerID":"40","Number":"40","Transponder":"3613729","FirstName":"Jaden","LastName":"Conwright","Nationality":"Dk Silver/Grey","AdditionalData":"VMB Driver Development and World Speed Motorsports","ClassID":"2","Position":"22","Laps":"8","TotalTime":"00:20:28.895","BestPosition":"12","BestLap":"8","BestLapTime":"00:01:31.583","LastLapTime":"00:01:31.583"},"49":{"RacerID":"49","Number":"49","Transponder":"3377830","FirstName":"Robin","LastName":"Shute","Nationality":"Yellow","AdditionalData":"Chilton Autobody | Old Bus Tavern | Takata","ClassID":"2","Position":"6","Laps":"13","TotalTime":"00:19:58.705","BestPosition":"4","BestLap":"13","BestLapTime":"00:01:27.376","LastLapTime":"00:01:27.376"},"62":{"RacerID":"62","Number":"62","Transponder":"261131","FirstName":"Bruce","LastName":"Brown","Nationality":"Black","AdditionalData":"","ClassID":"1","Position":"3","Laps":"13","TotalTime":"00:19:32.238","BestPosition":"9","BestLap":"3","BestLapTime":"00:01:28.454","LastLapTime":"00:01:28.803"},"67":{"RacerID":"67","Number":"67","Transponder":"1311726","FirstName":"William","LastName":"Weaver","Nationality":"Red/White/Blue","AdditionalData":"James Parker Insurance Associates","ClassID":"5","Position":"12","Laps":"12","TotalTime":"00:19:31.028","BestPosition":"17","BestLap":"12","BestLapTime":"00:01:32.248","LastLapTime":"00:01:32.248"},"72":{"RacerID":"72","Number":"72","Transponder":"835156","FirstName":"Michael","LastName":"Ottis","Nationality":"Blue/White","AdditionalData":"Patrick Ottis Company","ClassID":"5","Position":"13","Laps":"12","TotalTime":"00:19:34.977","BestPosition":"14","BestLap":"11","BestLapTime":"00:01:31.921","LastLapTime":"00:01:33.278"},"78":{"RacerID":"78","Number":"78","Transponder":"1320696","FirstName":"Brad","LastName":"Drew","Nationality":"White/Black","AdditionalData":"Life+Gear Lighting","ClassID":"5","Position":"14","Laps":"12","TotalTime":"00:19:35.672","BestPosition":"16","BestLap":"10","BestLapTime":"00:01:32.235","LastLapTime":"00:01:32.676"},"80":{"RacerID":"80","Number":"80","Transponder":"5066275","FirstName":"Jeffrey","LastName":"Pietz","Nationality":"Blk/Red/Slvr","AdditionalData":"Cleveland Infant Care","ClassID":"6","Position":"26","Laps":"","TotalTime":"00:00:00","BestPosition":"26","BestLap":"0","BestLapTime":"00:00:00","LastLapTime":""},"88":{"RacerID":"88","Number":"88","Transponder":"1765232","FirstName":"Randy","LastName":"Sturgeon","Nationality":"Yellow","AdditionalData":"","ClassID":"5","Position":"20","Laps":"12","TotalTime":"00:20:18.867","BestPosition":"20","BestLap":"10","BestLapTime":"00:01:34.577","LastLapTime":"00:01:34.977"},"92":{"RacerID":"92","Number":"92","Transponder":"1897846","FirstName":"Bruce","LastName":"Carpenter","Nationality":"Silver","AdditionalData":"Shoe String Racing","ClassID":"5","Position":"21","Laps":"11","TotalTime":"00:18:46.076","BestPosition":"23","BestLap":"10","BestLapTime":"00:01:36.092","LastLapTime":"00:01:40.989"}}}})RAW";
void setup()
{
Serial.begin( 115200 );
JsonDocument filter;
filter["Session"]["Competitors"] = true;
JsonDocument doc;
deserializeJson( doc, json_string, DeserializationOption::Filter( filter ) );
JsonObject root = doc["Session"]["Competitors"].as<JsonObject>();
for ( JsonPair kv : root )
{
JsonObject object = kv.value().as<JsonObject>();
Serial.print( "Competitor = " );
Serial.print( kv.key().c_str() );
Serial.print( ", Number = " );
Serial.print( object["Number"].as<uint8_t>() );
Serial.print( ", FirstName = " );
Serial.println( object["FirstName"].as<const char*>() );
}
}
void loop()
{
}