Uit de cursus: Training over basisprincipes van Python
JSON - tutorial Python
Uit de cursus: Training over basisprincipes van Python
JSON
- [Instructeur] Voorheen hebben we ons veel gericht op het lezen en schrijven van bestanden van en naar de schijf. JSON-bestanden met de extensie .json zijn natuurlijk gebruikelijk en u kunt er regelmatig mee werken. Maar voor nu richten we ons vooral op JSON-snaren. Ik ga er nu van uit dat je redelijk goed bent in het lezen van bestanden van de schijf. U kunt hun inhoud in een tekenreeks laden en nu bevindt u zich met een JSON-tekenreeks. Dus wat doe je? Nou, laten we een JSON-string maken, a is appel, b is beer, c is kat. Oké. Iets om in gedachten te houden, JSON is geen Python. Deze JSON-geformatteerde string lijkt veel op een Python-woordenboek, maar dat is het niet. Het is een snaar. Ik heb veel zelfs zeer ervaren programmeurs in de war zien raken hierover en uit het oog verliezen waar ze mee werken. Dit is een tekenreeks die toevallig in het JSON-formaat is. En om er een woordenboek van te maken, moeten we de JSON-module bovenaan ons notitieblok importeren, json importeren, en dan gaan we een methode gebruiken met de naam json.loads en de tekenreeks jsonString doorgeven. Merk op dat dit ladingen meervoud wordt genoemd en niet belasting enkelvoud. Nog een veelgemaakte fout. Dus nu hebben we een Python-woordenboek. Ik kan dit Python-woordenboek kopiëren en een volgkomma toevoegen, en dat is prima. Maar als ik een volgkomma aan deze JSON-tekenreeks toevoeg, krijgen we een JSON-decoderingsfout. Het is dus heel gebruikelijk als u met JSON werkt van een mogelijk onbetrouwbare bron om deze json.loads te omringen met een poging, behalve JSONDecodeError:print Kan JSON niet parseren. En omdat deze JSONDecodeError afkomstig is van de JSON-module, moeten we deze ook specifiek importeren. Dus van json JSONDecodeError importeren. Dus dat is JSON lezen, maar hoe zit het met in de tegenovergestelde richting gaan en een Python-woordenboek in een JSON-string dumpen? Gebruik hiervoor de methode json.dumps. Dus hier is mijn pythonDict, ik ga json.dumps pythonDict gebruiken. En nogmaals, merk op dat dit dumps meervoud zijn. Normaal gesproken zou je in dit geval geen uitzonderingsafhandeling toevoegen, want als je een geldig Python-woordenboek hebt, kan er niet veel misgaan als je het formatteert als een JSON-string. Er is echter één uitzondering op deze regel waar een uitzondering op kan worden gegooid. En om dat te demonstreren, laten we heel snel een dierenklasse maken, klasse Dier init zelf, naam, self.name gelijk is aan naam, en laten we ons woordenboek aanpassen om deze Dierklasse te gebruiken. Het is duidelijk dat een appel geen dier is, dus ik ga dit vervangen door aardvarken en dat er gewoon in doen. Dierlijke beer en dierlijke kat. Oké, laten we nu dit woordenboek dumpen. Oeps. Dier. Daar gaan we. Oké, dus je ziet dat we een TypeError krijgen, Object van het type Dier is niet JSON-serialiseerbaar. De JSON-module heeft geen idee hoe hij met deze Animal-klasse om moet gaan. Het weet niet wat het JSON-equivalent zou moeten zijn. Wat we hier doen, is de standaard JSON-encoder die deze gebruikt overschrijven met een eigen JSON-encoder. Dus eerst gaan we de JSONEncoder importeren. Goed, en nu kunnen we er een maken. Dus we gaan de JSONEncoder-klasse uitbreiden om een nieuwe AnimalEncoder-klasse JSONEncoder te maken. Oké, en het enige dat we hier moeten overschrijven is de standaardmethode, dus def standaard zelf en o. O is het object dat hier wordt doorgegeven en dat moet worden gedecodeerd in JSON. Dus als type o gelijk is aan Dier, als we te maken hebben met een Dierlijk object, geef dan o.name terug. Anders, retourneer super standaard o. Dus als het geen dier is, geven we het door aan de bovenliggende versie van de encoder door super te gebruiken, wat de bovenliggende JSONEncoder-klasse is, en vervolgens die standaardmethode aan te roepen. En dan moeten we JSON-dumps laten weten dat het deze encoder moet gebruiken en we kunnen dat doen door het cls-trefwoordargument, AnimalEncoder, door te geven, en daar ga je. Nogmaals, over het algemeen hoeft u json.dumps niet te omringen in een try-behalve-instructie, omdat u meestal de woordenboeken maakt die u doorgeeft aan json.dumps in uw eigen code, en u moet op de juiste manier omgaan met alle gegevenstypen die u daar doorgeeft. Maar als je gekke JSON-geformatteerde bestanden van onbekende bronnen krijgt, kun je het beste oppassen. Blijf veilig daarbuiten.
Oefen terwijl u leert met oefenbestanden
Download de bestanden die de cursusleider gebruikt tijdens de cursus. Volg de stappen en leer door te kijken, te luisteren en te oefenen.