2023-10-03 01:50:06 -04:00
import json
2023-10-03 04:31:37 -04:00
def replace_and_sort_keys_in_json ( file_path , replacements ) :
""" Replace keys in the JSON file based on the replacements dictionary and sort Accolades. """
2023-10-03 01:50:06 -04:00
with open ( file_path , ' r ' ) as file :
data = json . load ( file )
def recursive_key_replace ( obj , replacements ) :
if isinstance ( obj , dict ) :
new_obj = { }
for key , value in obj . items ( ) :
new_key = replacements . get ( key , key )
new_obj [ new_key ] = recursive_key_replace ( value , replacements )
2023-10-03 05:22:41 -04:00
if new_key == " mode " : # Sort Game Modes by 'timePlayed' in descending order
sorted_modes = dict ( sorted ( new_obj [ new_key ] . items ( ) , key = lambda item : item [ 1 ] [ ' properties ' ] [ ' timePlayed ' ] , reverse = True ) )
new_obj [ new_key ] = sorted_modes
if new_key in [ " Assault Rifles " , " Shotguns " , " Marksman Rifles " , " Snipers " , " LMGs " , " Launchers " , " Pistols " , " SMGs " , " Melee " ] : # Sort Weapons by 'kills' in descending order
sorted_weapons = dict ( sorted ( new_obj [ new_key ] . items ( ) , key = lambda item : item [ 1 ] [ ' properties ' ] [ ' kills ' ] , reverse = True ) )
new_obj [ new_key ] = sorted_weapons
if new_key in [ " Field Upgrades " ] : # Sort Field Upgrades by 'uses' in descending order
sorted_fieldupgrades = dict ( sorted ( new_obj [ new_key ] . items ( ) , key = lambda item : item [ 1 ] [ ' properties ' ] [ ' uses ' ] , reverse = True ) )
new_obj [ new_key ] = sorted_fieldupgrades
if new_key in [ " Tactical Equipment " , " Lethal Equipment " ] : # Sort Lethal and Tactical equipment by 'uses' in descending order
sorted_equipment = dict ( sorted ( new_obj [ new_key ] . items ( ) , key = lambda item : item [ 1 ] [ ' properties ' ] [ ' uses ' ] , reverse = True ) )
new_obj [ new_key ] = sorted_equipment
if new_key == " Scorestreaks " : # Sort Lethal and Support Scorestreaks by 'awardedCount' in descending order
for subcategory , scorestreaks in new_obj [ new_key ] . items ( ) :
sorted_scorestreaks = dict ( sorted ( scorestreaks . items ( ) , key = lambda item : item [ 1 ] [ ' properties ' ] [ ' awardedCount ' ] , reverse = True ) )
new_obj [ new_key ] [ subcategory ] = sorted_scorestreaks
2023-10-03 04:31:37 -04:00
# Sort Accolades in descending order
if new_key == " Accolades " :
sorted_accolades = dict ( sorted ( new_obj [ new_key ] [ ' properties ' ] . items ( ) , key = lambda item : item [ 1 ] , reverse = True ) )
new_obj [ new_key ] [ ' properties ' ] = sorted_accolades
2023-10-03 05:22:41 -04:00
2023-10-03 01:50:06 -04:00
return new_obj
elif isinstance ( obj , list ) :
for index , value in enumerate ( obj ) :
obj [ index ] = recursive_key_replace ( value , replacements )
return obj
data = recursive_key_replace ( data , replacements )
with open ( file_path , ' w ' ) as file :
json . dump ( data , file , indent = 4 )
if __name__ == " __main__ " :
# Define the keys to be replaced and their replacements
replacements = {
# Gamemodes
" dom " : " Domination " ,
" hc_dom " : " Hardcore Domination " ,
" war " : " Team Deathmatch " ,
" hc_war " : " Hardcore Team Deathmatch " ,
" hq " : " Headquarters " ,
" hc_hq " : " Hardcore Headquarters " ,
" conf " : " Kill Confirmed " ,
" hc_conf " : " Hardcore Kill Confirmed " ,
" koth " : " Hardpoint " ,
" koth_hc " : " Hardcore Hardpoint " ,
" sd " : " Search and Destroy " ,
" hc_sd " : " Hardcore Search and Destroy " ,
" cyber " : " Cyber Attack " ,
" hc_cyber " : " Hardcore Cyber Attack " ,
" grnd " : " Grind " ,
" arm " : " Ground War " ,
" infect " : " Infected " ,
" gun " : " Gun Game " ,
" arena " : " Gunfight " ,
" br " : " Battle Royale (Warzone) " ,
" br_dmz " : " Plunder " ,
" br_all " : " Battle Royale (Warzone & Plunder) " ,
# Weapons
" weapon_assault_rifle " : " Assault Rifles " ,
" weapon_shotgun " : " Shotguns " ,
" weapon_marksman " : " Marksman Rifles " ,
" weapon_sniper " : " Snipers " ,
" tacticals " : " Tactical Equipment " ,
" lethals " : " Lethal Equipment " ,
" weapon_lmg " : " LMGs " ,
" weapon_launcher " : " Launchers " ,
" supers " : " Field Upgrades " ,
" weapon_pistol " : " Pistols " ,
" weapon_other " : " Primary Melee " ,
" weapon_smg " : " SMGs " ,
" weapon_melee " : " Melee " ,
" scorestreakData " : " Scorestreaks " ,
" lethalScorestreakData " : " Lethal Scorestreaks " ,
" supportScorestreakData " : " Support Scorestreaks " ,
# Guns
## Assault Rifles
" iw8_ar_tango21 " : " RAM-7 " ,
" iw8_ar_mike4 " : " M4A1 " ,
" iw8_ar_valpha " : " AS VAL " ,
" iw8_ar_falpha " : " FR 5.56 " ,
" iw8_ar_mcharlie " : " M13 " ,
" iw8_ar_akilo47 " : " AK-47 " ,
" iw8_ar_asierra12 " : " Oden " ,
" iw8_ar_galima " : " CR-56 AMAX " ,
" iw8_ar_sierra552 " : " Grau 5.56 " ,
" iw8_ar_falima " : " FAL " ,
" iw8_ar_anovember94 " : " AN-94 " ,
" iw8_ar_kilo433 " : " Kilo 141 " ,
" iw8_ar_scharlie " : " FN Scar 17 " ,
" iw8_sh_mike26 " : " VLK Rogue " ,
## Shotguns
" iw8_sh_charlie725 " : " 725 " ,
" iw8_sh_oscar12 " : " Origin 12 Shotgun " ,
" iw8_sh_aalpha12 " : " JAK-12 " ,
" iw8_sh_romeo870 " : " Model 680 " ,
" iw8_sh_dpapa12 " : " R9-0 Shotgun " ,
## Marksman Rifles
" iw8_sn_sbeta " : " MK2 Carbine " ,
" iw8_sn_crossbow " : " Crossbow " ,
" iw8_sn_romeo700 " : " SP-R 208 " ,
" iw8_sn_kilo98 " : " Kar98k " ,
" iw8_sn_mike14 " : " EBR-14 " ,
" iw8_sn_sksierra " : " SKS " ,
## Sniper Rifles
" iw8_sn_alpha50 " : " AX-50 " ,
" iw8_sn_hdromeo " : " HDR " ,
" iw8_sn_delta " : " Dragunov " ,
" iw8_sn_xmike109 " : " Rytec AMR " ,
## Tactical Equipment
" equip_gas_grenade " : " Gas Grenade " ,
" equip_snapshot_grenade " : " Snapshot Grenade " ,
" equip_decoy " : " Decoy Grenade " ,
" equip_smoke " : " Smoke Grenade " ,
" equip_concussion " : " Concussion Grenade " ,
" equip_hb_sensor " : " Heartbeat Sensor " ,
" equip_flash " : " Flash Grenade " ,
" equip_adrenaline " : " Stim " ,
## Lethal Equipment
" equip_frag " : " Frag Grenade " ,
" equip_thermite " : " Thermite " ,
" equip_semtex " : " Semtex " ,
" equip_claymore " : " Claymore " ,
" equip_c4 " : " C4 " ,
" equip_at_mine " : " Proximity Mine " ,
" equip_throwing_knife " : " Throwing Knife " ,
" equip_molotov " : " Mototov Cocktail " ,
## LMGs
" iw8_lm_kilo121 " : " M91 " ,
" iw8_lm_mkilo3 " : " Bruen Mk9 " ,
" iw8_lm_mgolf34 " : " MG34 " ,
" iw8_lm_lima86 " : " SA87 " ,
" iw8_lm_pkilo " : " PKM " ,
" iw8_lm_sierrax " : " FiNN LMG " ,
" iw8_lm_mgolf36 " : " Holger-26 " ,
# "": "", ### RAAL LMG not implemented
## Launchers
" iw8_la_gromeo " : " PILA " ,
" iw8_la_rpapa7 " : " RPG-7 " ,
" iw8_la_juliet " : " JOKR " ,
" iw8_la_kgolf " : " Strela-P " ,
# "": "", ### Unknown Launcher
## Field Upgrades
" super_emp_drone " : " EMP Drone " ,
" super_trophy " : " Trophy System " ,
" super_ammo_drop " : " Munitions Box " ,
" super_weapon_drop " : " Weapon Drop " ,
" super_fulton " : " Cash Deposit Balloon " ,
" super_armor_drop " : " Armor Box " ,
" super_select " : " Field Upgrade Pro (Any) " ,
" super_tac_insert " : " Tactical Insertion " ,
" super_recon_drone " : " Recon Drone " ,
" super_deadsilence " : " Dead Silence " ,
" super_supply_drop " : " Loadout Drop " , ### Unsure if this is Loadout Drop
" super_tac_cover " : " Deployable Cover " ,
" super_support_box " : " Stopping Power Rounds " ,
## Pistols
" iw8_pi_cpapa " : " .357 " ,
" iw8_pi_mike9 " : " Renetti " ,
" iw8_pi_mike1911 " : " 1911 " ,
" iw8_pi_golf21 " : " X16 " ,
" iw8_pi_decho " : " .50 GS " ,
" iw8_pi_papa320 " : " M19 " ,
# "": "", ### Sykov not implemented
## Primary Melee
" iw8_me_riotshield " : " Riot Shield " ,
## SMGs
" iw8_sm_mpapa7 " : " MP7 " ,
" iw8_sm_augolf " : " AUG " ,
" iw8_sm_papa90 " : " P90 " ,
" iw8_sm_charlie9 " : " ISO " ,
" iw8_sm_mpapa5 " : " MP5 " ,
" iw8_sm_smgolf45 " : " Striker 45 " ,
" iw8_sm_beta " : " PP19 Bizon " ,
" iw8_sm_victor " : " Fennec " ,
" iw8_sm_uzulu " : " Uzi " ,
# "": "", ### CX9 not implemented
## Melee
" iw8_me_akimboblunt " : " Kali Sticks " ,
" iw8_me_akimboblades " : " Dual Kodachis " ,
" iw8_knife " : " Knife " ,
# Scorestreaks
" precision_airstrike " : " Precision Airstrike " ,
" cruise_predator " : " Cruise Missile " ,
" manual_turret " : " Shield Turret " ,
" white_phosphorus " : " White Phosphorus " ,
" hover_jet " : " VTOL Jet " ,
" chopper_gunner " : " Chopper Gunner " ,
" gunship " : " Gunship " ,
" sentry_gun " : " Sentry Gun " ,
" toma_strike " : " Cluster Strike " ,
" nuke " : " Nuke " ,
" juggernaut " : " Juggernaut " ,
" pac_sentry " : " Wheelson " ,
" chopper_support " : " Support Helo " ,
" bradley " : " Infantry Assault Vehicle " ,
" airdrop " : " Care Package " ,
" radar_drone_overwatch " : " Personal Radar " ,
" scrambler_drone_guard " : " Counter UAV " ,
" uav " : " UAV " ,
" airdrop_multiple " : " Emergency Airdrop " ,
" directional_uav " : " Advanced UAV " ,
# Accolades
" accoladeData " : " Accolades " ,
2023-10-03 04:31:37 -04:00
" classChanges " : " Most classes changed (Evolver) " ,
" highestAvgAltitude " : " Highest average altitude (High Command) " ,
" killsFromBehind " : " Most kills from behind (Flanker) " ,
" lmgDeaths " : " Most LMG deaths (Target Practice) " ,
" riotShieldDamageAbsorbed " : " Most damage absorbed with Riot Shield (Guardian) " ,
" flashbangHits " : " Most Flashbang hits (Blinder) " ,
" meleeKills " : " Most Melee kills (Brawler) " ,
" tagsLargestBank " : " Largest bank (Bank Account) " ,
" shotgunKills " : " Most Shotgun kills (Buckshot) " ,
" sniperDeaths " : " Most Sniper deaths (Zeroed In) " ,
" timeProne " : " Most time spent Prone (Grassy Knoll) " ,
" killstreakWhitePhosphorousKillsAssists " : " Most kills and assists with White Phosphorus (Burnout) " ,
" shortestLife " : " Shortest life (Terminal) " ,
" deathsFromBehind " : " Most deaths from behind (Blindsided) " ,
" higherRankedKills " : " Most kills on higher ranked scoreboard players (Upriser) " ,
" mostAssists " : " Most assists (Wingman) " ,
" leastKills " : " Fewest kills (The Fearful) " ,
" tagsDenied " : " Denied the most tags (Denied) " ,
" killstreakWheelsonKills " : " Most Wheelson kills " ,
" sniperHeadshots " : " Most Sniper headshots (Dead Aim) " ,
" killstreakJuggernautKills " : " Most Juggernaut kills (Heavy Metal) " ,
" smokesUsed " : " Most Smoke Grenades used (Chimney) " ,
" avengerKills " : " Most avenger kills (Avenger) " ,
" decoyHits " : " Most Decoy Grenade hits (Made You Look) " ,
" killstreakCarePackageUsed " : " Most Care Packages called in (Helping Hand) " ,
" molotovKills " : " Most Molotov kills (Arsonist) " ,
" gasHits " : " Most Gas Grenade hits (Gaseous) " ,
" comebackKills " : " Most comebacks (Rally) " ,
" lmgHeadshots " : " Most LMG headshots (LMG Expert) " ,
" smgDeaths " : " Most SMG deaths (Run and Gunned) " ,
" carrierKills " : " Most kills as carrier (Carrier) " ,
" deployableCoverUsed " : " Most Deployable Covers used (Combat Engineer) " ,
" thermiteKills " : " Most Thermite kills (Red Iron) " ,
" arKills " : " Most assault rifle kills (AR Specialist) " ,
" c4Kills " : " Most C4 kills (Handle With Care) " ,
" suicides " : " Most suicides (Accident Prone) " ,
" clutch " : " Most kills as the last alive (Clutched) " ,
" survivorKills " : " Most kills as survivor (Survivalist) " ,
" killstreakGunshipKills " : " Most Gunship kills (Death From Above) " ,
" timeSpentAsPassenger " : " Most time spent as a passenger (Navigator) " ,
" returns " : " Most flags returned (Flag Returner) " ,
" smgHeadshots " : " Most SMG headshots (SMG Expert) " ,
" launcherDeaths " : " Most launcher deaths (Fubar) " ,
" oneShotOneKills " : " Most one shot kills (One Shot Kill) " ,
" ammoBoxUsed " : " Most Munitions Boxes used (Provider) " ,
#"spawnSelectSquad": "",
" weaponPickups " : " Most picked up weapons (Loaner) " ,
" pointBlankKills " : " Most point blank kills (Personal Space) " ,
" tagsCaptured " : " Collected the most tags (Confirmed Kills) " ,
" killstreakGroundKills " : " Most ground based killstreak kills (Ground Control) " ,
" distanceTraveledInVehicle " : " Longest distance travelled in a vehicle (Cross Country) " ,
" longestLife " : " Longest life (Lifer) " ,
" stunHits " : " Most Stun Grenade hits (Stunner) " ,
" spawnSelectFlag " : " Most FOB Spawns (Objective Focused) " , # Unsure
" shotgunHeadshots " : " Most Shotgun headshots (Boomstick) " ,
" bombDefused " : " Most defuses (Defuser) " ,
" snapshotHits " : " Most Snapshot Grenade hits (Photographer) " ,
" noKillsWithDeath " : " No kills with at least 1 death (Participant) " ,
" killstreakAUAVAssists " : " Most Advanced UAV assists (Target Rich Environment) " ,
" killstreakPersonalUAVKills " : " Most kills with a Personal Radar active (Nothing Personal) " ,
" tacticalInsertionSpawns " : " Most Tactical Insertions used (Revenant) " ,
" launcherKills " : " Most Launcher kills (Explosive) " ,
" spawnSelectVehicle " : " Most vehicle spawns (Oscar Mike) " ,
" mostKillsLeastDeaths " : " Most kills and fewest deaths (MVP) " ,
" mostKills " : " Most kills (The Feared) " ,
" defends " : " Most defend kills (Defense) " ,
" timeSpentAsDriver " : " Most time spent driving (Driver) " ,
" " : " " # WIP - Still adding more
2023-10-03 01:50:06 -04:00
}
file_path = " stats.json "
2023-10-03 04:31:37 -04:00
replace_and_sort_keys_in_json ( file_path , replacements )
2023-10-03 05:22:41 -04:00
print ( f " Keys sorted and replaced in { file_path } ! " )