Khoa Nguyen Khoa Nguyen - 2 months ago 12
JSON Question

How to return the random key and use it to call next value in array list JSON?

I have a small problem. Here is my code:

random_key = random.randrange(0, len(product['products'])+1, 2)
if product['products'][0]['images'][3]['url'] is None:
_send_to_fb(
fbid,
product['products']
[random_key]['title'],
product['products']['key_of_random_title']['urls'][0]['value'],
product['products'][0]['summary'])


So I have
title
,
url
and
summary
. What I actually want here is to get a random product of the product array list. What I get now is only the random value of product's title.

I want to know how can I get that random_key and use it to get the right url and summary as well. (
'title.random_key'
) for example. Or get 1 random product and return all its title, url, summary,..

This is how my json array list looks like

"products": [
{
"id": "9200000059237726",
"ean": "5035223116370",
"gpc": "games",
"title": "FIFA 17 - PS4",
"specsTag": "Electronic Arts",
"summary": "PlayStation 4 | PEGI-leeftijd: 3 | Sport|Actie | 29 september 2016",
"rating": 0,
"shortDescription": "<h3 style=\"display:inline;\">Reserveer nu FIFA 17 en ontvang een halfjaar gratis VI Premium* <\/h3><br /><b>Daarnaast ontvang je ook nog de volgende pre-order DLC*:<\/b><br /><ul class=\"default_listitem\" style=\"display: inline;\"><li style=\"display:inline;\">5 FUT Draft-tokens, 1 per week gedurende 5 weken <\/li><br /><li style=\"display:inline;\">FUT-leenspeler voor 8 wedstrijden, keuze uit Hazard, Martial, Reus of Rodriguez<\/li><br /><li style=\"display:inline;\">Special Edition FUT-tenues<\/li><\/ul><br /><br /><i>* De VI Premium code + de DLC codes worden op dag van release voor 18.00 per email verstuurd. Iedereen die al gereserveerd heeft ontvangt ook een halfjaar VI Premium + de Pre-order DLC!<\/i><br /><br /><h3 style=\"display:inline;\">Informatie over de aanbieding:<\/h3><br />Je ontvangt...",
"longDescription": "<h3 style=\"display:inline;\">Reserveer nu FIFA 17 en ontvang een halfjaar gratis VI Premium* <\/h3><br /><b>Daarnaast ontvang je ook nog de volgende pre-order DLC*:<\/b><br /><ul class=\"default_listitem\" style=\"display: inline;\"><li style=\"display:inline;\">5 FUT Draft-tokens, 1 per week gedurende 5 weken <\/li><br /><li style=\"display:inline;\">FUT-leenspeler voor 8 wedstrijden, keuze uit Hazard, Martial, Reus of Rodriguez<\/li><br /><li style=\"display:inline;\">Special Edition FUT-tenues<\/li><\/ul><br /><br /><i>* De VI Premium code + de DLC codes worden op dag van release voor 18.00 per email verstuurd. Iedereen die al gereserveerd heeft ontvangt ook een halfjaar VI Premium + de Pre-order DLC!<\/i><br /><br /><h3 style=\"display:inline;\">Informatie over de aanbieding:<\/h3><br />Je ontvangt de volledige FIFA 17-game samen met maximaal 5 FUT Draft-tokens, een FUT-leenspeler voor 8 wedstrijden en Special Edition FUT-tenues.<br /><br /><h3 style=\"display:inline;\">Wat is FIFA Ultimate Team (FUT)?<\/h3><br />EA SPORTS FIFA 17 Ultimate Team is een gigantische online community van fans die in FIFA 17 hun ultieme voetbalteam samenstellen met de beste spelers ter wereld, hun team coachen en er het veld mee opgaan. Sluit je aan bij meer dan 15 miljoen fans en ga de uitdaging aan om voetbalteams samen te stellen met de beste spelers ter wereld door spelers te verdienen, kopen, verkopen en te verhandelen met de community van Ultimate Team. Betreed het veld met je dreamteam en speel wanneer je maar wilt tegen de teams van je vrienden. Stel meerdere selecties samen, beheer ze en doe mee aan online en singleplayertoernooien. Al deze toernooien worden wekelijks dynamisch bijgewerkt.<br /><br /><h3 style=\"display:inline;\">Wat is een FIFA Ultimate Team-leenspeler? <\/h3><br />Heb je je ooit afgevraagd hoe het zou zijn om een topvoetballer in je team te hebben? Je kunt enkele van de meest gewilde spelers uit FIFA Ultimate Team gedurende een beperkt aantal wedstrijden uitproberen.<br /><br /><h3 style=\"display:inline;\">Wat is een FIFA Ultimate Team Draft?<\/h3><br />FUT Draft is een nieuwe manier om FIFA Ultimate Team te spelen! Stel een selectie samen en daag tegenstanders uit in een toernooi om pakketten, munten en nog veel meer te verdienen. Test je vaardigheden als teambouwer en selecteer uit 5 spelers de beste speler voor elke positie. Maak belangrijke keuzes gebaseerd op de kwaliteiten van spelers of teamgeest. Win grotere prijzen naarmate je verder komt; win alle 4 de wedstrijden op rij voor de beste beloningen!<br /><br /><h3 style=\"display:inline;\">Wat is de EA SPORTS Football Club (EAS FC)?<\/h3><br />Ervaar het sociale netwerk van voetbal. Verdien beloningen, stijg in niveau, doe mee aan live Uitdagingen en maak verbinding met je vrienden. Alles in FIFA 17 wordt beoordeeld en gecommuniceerd via EA SPORTS Football Club. Fans kunnen beloningen verdienen waarmee ze items uit de Football Club-catalogus kunnen ontgrendelen en hun status vergroten door te proberen niveau 100 te halen. Verhaallijnen uit de echte wereld schotelen je in EA SPORTS Football Club regelmatig uitdagingen voor, waardoor FIFA 17 aanvoelt, speelt en er uitziet als het echte voetbalseizoen. ",
"urls": [
{
"key": "DESKTOP",
"value": "https://www.bol.com/nl/p/fifa-17-ps4/9200000059237726/"
},
{
"key": "MOBILE",
"value": "https://m.bol.com/nl/p/fifa-17-ps4/9200000059237726/"
}
],
"images": [],
"media": [],
"offerData": {},
"promotions": [],
"parentCategoryPaths": []
},
{
"id": "9200000059241692",
"ean": "5030949121820",
"gpc": "games",
"title": "FIFA 17 - Deluxe Edition - PS4",
"specsTag": "Electronic Arts",
"summary": "PlayStation 4 | PEGI-leeftijd: 3 | Sport|Actie | 29 september 2016",
"rating": 0,
"shortDescription": "<h3 style=\"display:inline;\">Reserveer nu FIFA 17 en ontvang een halfjaar gratis VI Premium* <\/h3><br /><b>In de Deluxe edition zit ook nog de volgende DLC bijgesloten:<\/b><br /><ul class=\"default_listitem\" style=\"display: inline;\"><li style=\"display:inline;\">20 FIFA Ultimate Team™ Premium Jumbo Goud-pakketten, 1 per week gedurende 20 weken<\/li><br /><li style=\"display:inline;\">Team van de week FUT-leenspelers voor 3 wedstrijden, maximaal 1 per week gedurende 20 weken<\/li><br /><li style=\"display:inline;\">FUT-leenspeler voor 8 wedstrijden, keuze uit Hazard, Martial, Reus of Rodriguez<\/li><br /><li style=\"display:inline;\">Special Edition FUT-tenues<\/li><\/ul><br /><br /><i>* De VI Premium code wordt op dag van release voor 18.00 per email verstuurd. Iedereen die al ger...<\/i>",
"longDescription": "<h3 style=\"display:inline;\">Reserveer nu FIFA 17 en ontvang een halfjaar gratis VI Premium* <\/h3><br /><b>In de Deluxe edition zit ook nog de volgende DLC bijgesloten:<\/b><br /><ul class=\"default_listitem\" style=\"display: inline;\"><li style=\"display:inline;\">20 FIFA Ultimate Team™ Premium Jumbo Goud-pakketten, 1 per week gedurende 20 weken<\/li><br /><li style=\"display:inline;\">Team van de week FUT-leenspelers voor 3 wedstrijden, maximaal 1 per week gedurende 20 weken<\/li><br /><li style=\"display:inline;\">FUT-leenspeler voor 8 wedstrijden, keuze uit Hazard, Martial, Reus of Rodriguez<\/li><br /><li style=\"display:inline;\">Special Edition FUT-tenues<\/li><\/ul><br /><br /><i>* De VI Premium code wordt op dag van release voor 18.00 per email verstuurd. Iedereen die al gereserveerd heeft ontvangt ook een halfjaar VI Premium. DLC Deluxe edition zit bijgesloten in de verpakking!<\/i><br /><br /><h3 style=\"display:inline;\">Informatie over de aanbieding:<\/h3><br />Je ontvangt de volledige FIFA 17-game samen met maximaal 20 FUT Premium Jumbo Goud-pakketten, Team van de week leenspelers voor 3 wedstrijden, een FUT-leenspeler voor 8 wedstrijden en Special Edition FUT-tenues.<br /><br /><h3 style=\"display:inline;\">Wat is FIFA Ultimate Team (FUT)?<\/h3><br />EA SPORTS FIFA 17 Ultimate Team is een gigantische online community van fans die in FIFA 17 hun ultieme voetbalteam samenstellen met de beste spelers ter wereld, hun team coachen en er het veld mee opgaan. Sluit je aan bij meer dan 15 miljoen fans en ga de uitdaging aan om voetbalteams samen te stellen met de beste spelers ter wereld door spelers te verdienen, kopen, verkopen en te verhandelen met de community van Ultimate Team. Betreed het veld met je dreamteam en speel wanneer je maar wilt tegen de teams van je vrienden. Stel meerdere selecties samen, beheer ze en doe mee aan online en singleplayertoernooien. Al deze toernooien worden wekelijks dynamisch bijgewerkt.<br /><br /><h3 style=\"display:inline;\">Wat is een FIFA Ultimate Team Premium Jumbo Goud-pakket?<\/h3><br />Ervaar hoe spannend het is om pakketten te openen. Elk pakket is een combinatie van 24 items, die kunnen bestaan uit spelers, contracten, stadions, managers, personeel, conditie-items, genezende items, ballen, tenues, badges en teamgeeststijlen. Goud-pakketten bestaan uit spelers die in het spel een beoordeling van minimaal 75 hebben en bevatten minstens zeven zeldzame items. Zeldzame items zijn onder meer verbeterde eigenschappen voor spelers, langere contracten en de meest gewilde spelers.<br /><br /><h3 style=\"display:inline;\">Wat is een FIFA Ultimate Team-leenspeler?<\/h3> <br />Heb je je ooit afgevraagd hoe het zou zijn om een topvoetballer in je team te hebben? Je kunt enkele van de meest gewilde spelers uit FIFA Ultimate Team gedurende een beperkt aantal wedstrijden uitproberen.<br /><br /><h3 style=\"display:inline;\">Wat is de EA SPORTS Football Club (EAS FC)?<\/h3><br />Ervaar het sociale netwerk van voetbal. Verdien beloningen, stijg in niveau, doe mee aan live Uitdagingen en maak verbinding met je vrienden. Alles in FIFA 17 wordt beoordeeld en gecommuniceerd via EA SPORTS Football Club. Fans kunnen beloningen verdienen waarmee ze items uit de Football Club-catalogus kunnen ontgrendelen en hun status vergroten door te proberen niveau 100 te halen. Verhaallijnen uit de echte wereld schotelen je in Football Club regelmatig uitdagingen voor, waardoor FIFA 17 aanvoelt, speelt en er uitziet als het echte voetbalseizoen. ",
"urls": [
{
"key": "DESKTOP",
"value": "https://www.bol.com/nl/p/fifa-17-deluxe-edition-ps4/9200000059241692/"
},
{
"key": "MOBILE",
"value": "https://m.bol.com/nl/p/fifa-17-deluxe-edition-ps4/9200000059241692/"
}
],
"images": [],
"media": [],
"offerData": {},
"promotions": [],
"parentCategoryPaths": []
},
{
"id": "9200000058463485",
"ean": "5030933113763",
"gpc": "games",
"title": "Battlefield 1 - PS4",
"specsTag": "Electronic Arts",
"summary": "PlayStation 4 | PEGI-leeftijd: 18 | Actie|Shooter | oktober 2016",
"rating": 40,
"shortDescription": "<h3 style=\"display:inline;\"><b>Pre-order actie<\/b><\/h3><br />Reserveer Battlefield™ 1 en maak kans op een jaar lang gratis paintballen met je vrienden! Daarnaast geven wij nog 10 keer een los paintball jaarabonnement weg.<br /><br />Ook ontvang je het Battlefield™ 1 Hellfighter Pack en krijg je 7 dagen eerder toegang tot een map die later in 2016 wordt uitgebracht. De Harlem Hellfighters waren een van de sterkste infanterieregimenten in de Grote Oorlog. Dit pakket bevat unieke unlocks die zijn geïnspireerd door hun heldendaden.<br /><br /><b>Inhoud<\/b><br />• <b>Hellfighter Trenc...<\/b>",
"longDescription": "<h3 style=\"display:inline;\"><b>Pre-order actie<\/b><\/h3><br />Reserveer Battlefield™ 1 en maak kans op een jaar lang gratis paintballen met je vrienden! Daarnaast geven wij nog 10 keer een los paintball jaarabonnement weg.<br /><br />Ook ontvang je het Battlefield™ 1 Hellfighter Pack en krijg je 7 dagen eerder toegang tot een map die later in 2016 wordt uitgebracht. De Harlem Hellfighters waren een van de sterkste infanterieregimenten in de Grote Oorlog. Dit pakket bevat unieke unlocks die zijn geïnspireerd door hun heldendaden.<br /><br /><b>Inhoud<\/b><br />• <b>Hellfighter Trench Shotgun<\/b> – Een door de strijd gehavend jachtgeweer gegraveerd met het Hellfighter-insigne en “Men of Bronze” op de receiver en het nummer van de eenheid 369th op de loop, samen met het reliëf “Go Forward or Die France 1918” op de houten kolf.<br />• <b>Hellfighter M1911<\/b> – Betrouwbaar en tijdloos reservewapen dat vandaag de dag nog steeds wordt gebruikt. Heeft als koosnaam \"old slabsides\" en is gegraveerd met het Hellfighter-insigne op het staartstuk en \"Men of Bronze\" op de vuurmond.<br />• <b>Hellfighter Bolo Knife<\/b> – Angstaanjagend mes, gegraveerd met het nummer van het Hellfighter-regiment 369th, waardoor de vijand meteen heimwee krijgt.<br />• <b>Hellfighter Insignia<\/b> – Draag dit embleem om aan te geven dat je bij de elite-eenheid Hellfighter hoort en angst inboezemt op het strijdveld.<br /><br /><h3 style=\"display:inline;\">Battlefield 1<\/h3><br />Ervaar het begin van totale oorlog in Battlefield™ 1. Baan je een weg door epische gevechten, variërend van krappe belegerde Franse steden tot zwaar verdedigde bergforten in de Italiaanse Alpen, en aanschouw waanzinnige veldslagen in de woestijn van Arabië. Ontdek een nieuwe wereld in oorlog via een avontuurlijke campagne, of doe mee aan epische multiplayer gevechten met maximaal 64 spelers. Stem je tactiek af op de adembenemende omgevingen en totale verwoesting. Strijd als infanterie of bestuur ongelooflijke voertuigen te land, ter zee en in de lucht (variërend van tanks en motoren op de grond tot dubbeldekkers en gigantische oorlogsschepen), en stem je speelstijl af op de meest dynamische gevechten in de geschiedenis van Battlefield. <br /><br /><h3 style=\"display:inline;\">Belangrijkste kenmerken:<\/h3><br />• Epische multiplayer gevechten met 64 spelers - Vorm een squad met vrienden en doe mee aan de meest epische multiplayer gevechten in de geschiedenis van FPS met maximaal 64 spelers als infanteristen of bestuurders van voertuigen, variërend van tanks en motoren in het veld tot dubbeldekkers en gigantische oorlogsschepen. <br />• Ervaar het begin van totale oorlog – Maak deel uit van de grootste veldslagen in de geschiedenis van de mensheid. Van de zwaar verdedigde Alpen tot de verzengende woestijnen van Arabië, de oorlog raast op epische schaal te land, ter zee en in de lucht terwijl je getuige bent van de geboorte van moderne oorlogvoering.<br />• Adembenemende intuïtieve verwoesting - Met intuïtieve verwoesting is geen strijd ooit dezelfde. Vernietig grote en kleine voertuigen, en maak hele gebouwen met de grond gelijk. Van kleine houten huizen tot enorme stenen forten, zelfs de grond waarop je vecht kan uiteen worden gereten.<br />• Oorlogsverhalen van de andere kant van de wereld - Ontdek een wereld in oorlog via een avontuurlijke campagne en bekijk een wereldwijd conflict door de ogen van diverse personages, die worden verenigd door deze eerste moderne oorlog. ",
"urls": [],
"images": [],
"media": [],
"offerData": {},
"promotions": [],
"parentCategoryPaths": []
},
{
"id": "9200000061342591",
"ean": "3391891989886",
"gpc": "games",
"title": "The Witcher 3: Wild Hunt - Game of The Year Edition - PS4",
"specsTag": "Bandai Namco",
"summary": "PlayStation 4 | PEGI-leeftijd: 18 | Avontuur|Role Playing Game (RPG)",
"rating": 50,
"shortDescription": "<b>About the GAME OF THE YEAR Edition<\/b><br />Word een monsterslachter en stort je in het avontuur! Al bij de release was The Witcher 3: Wild Hunt een klassieker, met meer dan 250 Game of the Year-prijzen. Geniet nu van dit enorme, meer dan 100 uur durende avontuur in een open wereld, inclusief beide uitbreidingen en meer dan 50 uur aan extra gameplay. Deze editie bevat alle aanvullende content – nieuw(e) wapens, pantsers, partneroutfits, speltype en missies.<br /> <br /><b>About the GAME OF THE YEAR<\/b><br />De meest bekroonde gam...",
"longDescription": "<b>About the GAME OF THE YEAR Edition<\/b><br />Word een monsterslachter en stort je in het avontuur! Al bij de release was The Witcher 3: Wild Hunt een klassieker, met meer dan 250 Game of the Year-prijzen. Geniet nu van dit enorme, meer dan 100 uur durende avontuur in een open wereld, inclusief beide uitbreidingen en meer dan 50 uur aan extra gameplay. Deze editie bevat alle aanvullende content – nieuw(e) wapens, pantsers, partneroutfits, speltype en missies.<br /> <br /><b>About the GAME OF THE YEAR<\/b><br />De meest bekroonde game van 2015!<br />Word een monsterslachter en stort je in een episch avontuur om het kind uit de voorspelling te zoeken, een levend wapen van verwoesting.<br />INCLUSIEF ALLE UITBREIDINGEN EN AANVULLENDE CONTENT.<br /> <br /><b>Features:<\/b><br /> <br />Speel als een sterk getrainde professionele monsterslachter<br />Witchers worden van kinds af aan getraind en gemuteerd om bovennatuurlijke vaardigheden, kracht en reflexen te ontwikkelen. Ze vallen sociaal buiten alle groepen en vormen de contrabalans voor de met monsters geïnfecteerde wereld waarin ze wonen.<br /> <br />•Vernietig vijanden als professionele monsterjager op gruwelijke wijze, gewapend met een reeks upgradebare wapens, muterende drankjes en vechtmagie.<br />•Jaag op een diversiteit aan exotische monsters, van wilde beesten die zich ophouden in de bergpassen tot sluwe bovennatuurlijke roofdieren die schuilen in de donkere steegjes van dichtbevolkte steden.<br />•Investeer je beloningen om je wapens te upgraden en aangepaste pantsers te kopen, of geef ze uit aan paardenrennen, kaartspellen, vuistgevechten en andere leuke dingen in het leven.<br /> <br />Zoek het kind uit de voorspelling in een open fantasywereld met een dubbele moraal<br />De enorme open wereld van The Witcher is gemaakt voor eindeloos avontuur en zet nieuwe normen op het gebied van formaat, diepte en complexiteit. <br />•Doorkruis een open fantasywereld: verken vergeten ruïnes, grotten en scheepswrakken, handel met kooplieden en dwergensmeden in de steden, en ga op jacht op open vlakten tussen de bergen en de zee.<br />•Zoek in oorlogstijd het kind uit de voorspelling, een levend wapen van grote macht dat werd aangekondigd in oude elfenlegenden.<br />•Maak keuzes die verdergaan dan goed en kwaad, en ervaar de verstrekkende consequenties.<br /> <br /><b>Game of the Year EDITION<\/b><br />The Witcher 3: Wild Hunt Game of the Year-edition is een combinatie van de basisgame en alle aanvullende content die tot nu is uitgebracht.<br /> <br />•Inclusief de Hearts of Stone- en Blood & Wine-uitbreidingen, die 50 uur aan extra verhaal bieden, plus nieuwe functies en nieuwe gebieden die de verkenbare wereld met meer dan een derde uitbreiden!<br />•Biedt toegang tot alle aanvullende content tot nu toe, inclusief wapens, pantsers, zijdelingse missies, speltypen en nieuwe GWENT-kaarten!<br />•Inclusief alle technische en visuele updates, plus een nieuwe gebruikersinterface die volledig opnieuw is ontworpen op basis van feedback van leden van de Witcher-community.",
"urls": [],
"images": [],
"media": [],
"offerData": {},
"parentCategoryPaths": []
},

Answer

First of all, you're aware that the "2" in the randrange function skips all the odd-numbered elements, right?

That aside, the most natural way to solve this is tho first get a random product, then do whatever you need with its data/fields. Also, as another poster said, the ordering of getting the summary field is wrong. I think you copied/pasted that line--watch out for copy/paste when trying to write code.

products = product['products']
random_product = products[random.randrange(0, len(products)+1, 2)]
    if products[0]['images'][3]['url'] is None:
        _send_to_fb(fbid,
                    random_product['title'],
                    random_product['urls'][0]['value'],
                    random_product['summary'])

Finally, I wonder whether you really meant to check whether the first product's fourth image URL is None. If the image list is shorter than four elements, that check will cause an error. What is it you're really looking to find out?

Comments