La sérialisation/désérialisation Python JSON simplifiée ! (2024)

Introduction

Voici un petit tutoriel sur la façon dont j'analyse JSON en classes de données Python à l'aide du module json. Les classes de données sont super sympas car il y a beaucoup moins de cérémonie avec leur mise en place. C'est exactement le moment où tout ce dont vous avez besoin est un modèle pour une structure de données. Je pensais que l'utilisation de l'API de Steam comme exemple du monde réel serait utile pour combler le fossé entre un scénario du monde réel et un scénario inventé. J'espère que vous pourrez trouver de bons cas d'utilisation dans vos projets !

#python #pythonpourlesdébutants #codage #programmation #données #classe

Vidéo

Très bien, donc aujourd'hui, je vais vous montrer comment convertir des données Json en classes en Python et vice versa, comment sérialiser, euh des classes et toutes leurs propriétés en Json en une chaîne Json.

Donc, pour cet exemple, je vais utiliser l'API Steam.

Et c'est un point final qui obtient tous les meilleurs jeux sur Steam en fonction de leur nombre de joueurs.

Et quelque chose à noter à propos de Steam est que tous leurs points de terminaison tournent autour des ID d'application.

Et c'est une valeur qui représente le jeu.

Donc ce premier membre ici 730 est en fait Counter-Strike Global Offensive.

Et vous savez, ce sont toutes sortes de jeux différents.

Ce sera donc assez facile car ce sont tous des entiers, euh.

Alors, commençons.

La première chose que je ferais est de créer un nouveau fichier, et nous l'appelons les meilleurs jeux Steam, Dot py, et pour cela, je vais utiliser des classes de données.

Donc, la première chose que nous voulons faire ici est à partir des classes de données, importer la classe de données.

Et puis, si nous revenons à notre réponse ici, nous pouvons voir que ce champ de classem*nt est en fait une liste d'un objet enfant.

Donc je sais juste, euh, nous allons devoir importer le type de liste.

Donc, en tapant la liste d'importation.

Bon, alors nous devons commencer à modéliser la structure Json.

Et la façon dont vous voulez faire.

Il s'agit de commencer par les membres enfants les plus internes et de s'en sortir, car en Python, puisqu'il est interprété, il commence à partir de la ligne, un et descend.

Vous devez donc avoir défini les éléments enfants avant, vous savez, de vous frayer un chemin jusqu'au parent, nous allons donc commencer par modéliser cet objet enfant.

Nous ajoutons donc la classe de données The Decorator.

Et puis nous disons classe, nous l'appellerons Rank.

Et puis ces membres classent l'ID d'application simultanément dans le jeu, euh pic dans le jeu.

Et ce sont tous des nombres entiers.

Alors maintenant que nous avons l'enfant le plus profond, l'objet, ce qui est, le niveau suivant, eh bien, c'est ce champ rangs, qui est une liste de tous ces objets enfants ainsi que ce dernier champ de mise à jour, qui est un INT.

Nous voulons donc ajouter à nouveau ce décorateur et faire une classe, nous pouvons l'appeler réponse.

Et puis nous avons la dernière mise à jour, qui est un nombre entier, puis nous avons les rangs, qui sont une liste de rangs.

Maintenant, la chose à comprendre avec python est que tous ces éléments sont des indications de type.

Donc ce n'est pas fortement typé, vous pouvez avoir, vous savez, des erreurs lancées, mais il y a quelques bizarreries avec ça.

Et certaines choses sont un peu lâches.

Donc, pour la plupart, ce sont des indications de type, euh de toute façon, alors nous avons besoin d'avoir le niveau racine, qui est juste ce champ de réponse et il encapsule tout.

Nous ajoutons donc la classe de décorateur de classe de données.

Et puis nous pouvons appeler cela les meilleurs jeux Steam.

Et il a cette réponse sur le terrain.

Et il a ce type de cette classe de données ici.

Donc, pour en revenir à ce que je disais à propos du type faisant allusion, euh, nous devons ajouter ceci et je crois que cela s'appelle une méthode Dunder meth.

Et celui-ci en particulier s'appelle post init.

Et ce que cela fait, c'est qu'il est exécuté directement après l'appel de cette méthode Dunder, donc avec ces données Json, elles vont arriver sous forme de dictionnaire et elles vont définir ces valeurs en fonction de ce type et elles ne vont pas réellement utiliser, vous savoir, cette classe de rang que nous avons défini.

Nous avons donc défini ce message, oh désolé pour ce message.

On y va donc poster un net.

Et où ce que cela va faire va réinitialiser sa propre valeur après avoir été instancié.

Et pour ce faire, nous allons utiliser une combinaison de compréhension de liste et de décompression de dictionnaire.

Nous faisons donc un nouveau rang avec un rang non compressé pour le rang dans self.ranks.

Et je sais, c'est un peu bizarre.

Mais fondamentalement, l'ordre des opérations est que vous instanciez la classe, elle appelle la méthode dunder init.

Ces valeurs sont définies puis post init est appelé, et il réinitialise la valeur en utilisant une instanciation réelle de notre classe de classem*nt pour chaque élément de la liste et c'est tout ce que cela fait.

Et puis nous voulons faire cela aussi pour cette racine de niveau supérieur, euh, class so post, init self.

Et puis nous faisons self.response équivaut à une nouvelle réponse avec self.response décompressé, d'accord et puis nous avons terminé.

Il s'agit d'un modèle de classe ou d'un modèle de classe de données pour cette structure Json de l'API Steam.

Donc, dans main.py, nous pouvons faire à partir des meilleurs jeux Steam, importer les meilleurs jeux Steam.

Voilà donc notre classe de données.

Et puis puisque nous allons appeler une API, nous voulons utiliser les requêtes, paquet pip.

Nous importons donc les demandes.

Et si vous ne l'avez pas, vous faites des demandes d'installation pip, puis j'ai l'URL ici.

Ceci est l'URL des meilleurs jeux Steam.

Et puis nous voulons appeler cela en utilisant la bibliothèque de requêtes.

Nous voulons donc dire que la réponse Steam est égale à requests.get, puis nous faisons une requête get sur les meilleurs jeux Steam, l'URL et je vais simplement continuer et vous montrer à quoi cela ressemble.

Ainsi, lorsque nous imprimons steam.respond ou steam response, voici ce qui se passe.

Donc, c'est bien et tout ce qu'un 200 signifie.

Bon, ça veut dire que tout s'est passé.

Eh bien, mais ce n'est pas la valeur que nous voulons et c'est parce que la réponse est en fait sa propre classe en interne.

Il a donc cette méthode appelée point Json.

Et ce que cela fait, c'est qu'il obtient le corps du texte à partir de la réponse, et il prend un Json et le convertit en fait en un dictionnaire python, ce qui est exactement ce que nous voulons.

Donc, à partir de là, ce que nous pouvons faire, c'est faire en sorte que nos meilleurs jeux soient objet.

Donc, les meilleurs jeux sont les meilleurs jeux Steam, et nous décompressons le dictionnaire, répondons à Steam, car cette méthode Json crée un dictionnaire python.

Et donc, lorsque nous intégrons cela dans le constructeur de construction des meilleurs jeux Steam, cela va ici.

Il attribue une réponse égale à la valeur du dictionnaire.

Et puis après que cela soit instancié, il se réinitialise en utilisant notre classe de données définie.

Et il fait la même chose pour celui-ci jusqu'à ce que nous soyons sur ces types primitifs.

Alors maintenant, nous pouvons réellement imprimer ce que cela.

Eh bien, regardons ce premier top jeux.

Nous avons maintenant des membres fortement typés pour la classe de données.

Donc, je peux faire topgames.response à la dernière mise à jour et c'est vraiment bien parce qu'avec les dictionnaires, vous devriez utiliser ça, euh, indexer ou peu importe comment ça s'appelle.

Mais parce que nous avons utilisé cette méthode, nous avons maintenant un ensemble de classes entièrement défini qui modélise ce que cet objet représente.

Donc, si nous voulions imprimer le tout premier élément, nous pourrions imprimer les meilleurs jeux.

Rangs de points de réponse aux points.

Et puis nous pouvons l'utiliser.

Et puis voilà à quoi cela ressemblerait.

Voici donc à quoi ressemble l'impression d'une classe de données.

Mais comme vous pouvez le voir, nous avons le premier membre de cette classe de rangs, et il a un ID d'application de rang et tout fonctionne et c'est génial.

Alors maintenant que nous avons sérialisé Json en classes Data.

Maintenant, nous devons voir comment désérialiser.

Et cela signifie passer de la classe de données à une chaîne Json.

Donc, la première chose que nous voulons faire est d'ajouter une méthode à la classe de données racine de niveau supérieur que nous avons créée pour représenter cet objet entier, et nous pouvons définir en Json et prendre soi-même.

La prochaine chose est que nous allons avoir besoin de la fonction asdict, qui fait partie du module des classes de données.

Et puis nous voulons importer Json.

Donc ici, ce que nous allons faire est de retourner Json dot dumps maintenant json.dumps une fois un dictionnaire.

Nous utilisons donc comme dict self.

Et cela va prendre les meilleurs jeux Steam et transformer toutes ces propriétés en un seul grand dictionnaire.

Et puis nous en faisons une chaîne Json.

Et à partir de là, ce que nous pouvons faire, c'est Voyons ce que nous voulons faire avec open.

Cela va donc créer un fichier Json.

Nous pouvons donc l'appeler topgames.json w comme euh top games, Json.

Et puis nous voulons faire des jeux de haut niveau.

Json dot, les meilleurs jeux à droite pour Json.

Et puis nous réexécutons cela, mais nous devrions voir que le fichier Json apparaît et le voilà et c'est à peu près tout, comment vous allez et venez de Json aux classes de données en Python et quelque chose d'autre que nous pouvons faire est si vous regardez les docs, ce json.dumps, vous pouvez spécifier un retrait.

Je peux donc dire que l'indentation est égale à quatre à droite et réexécutons ceci.

Et voilà, c'est formaté.

Alors oui, c'est essentiellement ça et nous le ferons.

À plus tard.

La sérialisation/désérialisation Python JSON simplifiée ! (2024)
Top Articles
Latest Posts
Article information

Author: Twana Towne Ret

Last Updated:

Views: 5313

Rating: 4.3 / 5 (44 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Twana Towne Ret

Birthday: 1994-03-19

Address: Apt. 990 97439 Corwin Motorway, Port Eliseoburgh, NM 99144-2618

Phone: +5958753152963

Job: National Specialist

Hobby: Kayaking, Photography, Skydiving, Embroidery, Leather crafting, Orienteering, Cooking

Introduction: My name is Twana Towne Ret, I am a famous, talented, joyous, perfect, powerful, inquisitive, lovely person who loves writing and wants to share my knowledge and understanding with you.