J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python

Vous devez gérer Json en Python, et c'est une fonctionnalité intégrée C'était un peu difficile à gérer, il serait donc plus facile de gérer Json avec Python. J'ai créé une classe

C'est la première fois que je touche correctement Python, donc c'est un peu étrange à utiliser Il peut s'agir d'une fonction existante en premier lieu.

Cible

Lorsque vous traitez avec Json en Python Vous ne pouvez pas le faire sans Map entre Python et Json. Dans ce cas, pour en faire une classe, vous devez l'écrire pour chaque classe, De plus, lors de la sortie de Json à partir d'une classe, vous devez écrire un processus pour chaque classe. C'est ** très ennuyeux **

Par conséquent, il est automatiquement sérialisé à partir de la clé et du nom de variable de Json. Créez une classe qui crée Json à partir du nom de la variable

Code source

Cette classe ressemble à ceci.

JsonAdapter.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import json


class JsonAdapter(object):
	#Sérialiser depuis json
	def Serialize(self, argJsonData) :

		jsonData = argJsonData
		if isinstance(argJsonData, basestring ) :
			jsonData = json.loads(argJsonData)

		for key in self.__dict__.keys():
			if isinstance(getattr(self,key), JsonAdapter ) or getattr(self,key) == None :
				valclass = getattr(self,key)
				if valclass == None :
					valclass = getattr(sys.modules["Classes.DataPDO"],key)()

				valclass.Serialize(jsonData[key])
				setattr(self,key, valclass)

			elif isinstance(getattr(self,key), int ) :
				setattr(self,key, int(jsonData[key]))
			else :
				setattr(self,key, jsonData[key])

	#Sortie Json
	def ToJson(self):
		jsonDict = self.__ToDictionary()
		jsonstring = json.dumps(jsonDict, ensure_ascii=False)
		return jsonstring

	#Créer une carte
	def __ToDictionary(self):
		jsonDict = {}
		for key in self.__dict__.keys():
			if isinstance(getattr(self,key), JsonAdapter ) :
				jsonDict.update({key : getattr(self,key).__ToDictionary()})
			else :
				jsonDict.update({key : getattr(self,key)})
		return jsonDict

Si vous expliquez légèrement

def Serialize(self, argJsonData) : Maintenant, créez un dictionnaire à partir de json une fois, La valeur est prise avec le nom de la variable comme clé. Dans le cas d'une classe, la classe est générée et sérialisée à nouveau.

ToJson(self): Ensuite, au contraire, créez un Dictionnaire avec le nom de la variable comme clé, Json

Comment utiliser

L'exemple de code est ci-dessous.

sample.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import JsonAdapter

class Test(JsonAdapter.JsonAdapter):
    def __init__(self):
        self.num = 0
        self.str = ""
        self.test2 = Test2()

class Test2(JsonAdapter.JsonAdapter):
    def __init__(self):
        self.num = 0
        self.str = ""


if __name__ == "__main__":
    json = """{"test2": {"num": 200, "str": "def"}, "num": 100, "str": "abc"}"""
    test = Test()
    #Etat initial
    print test.ToJson()

    test.Serialize(json)

    #Après sérialisation
    print test.ToJson()

Résultat de sortie


{"test2": {"num": 0, "str": ""}, "num": 0, "str": ""}
{"test2": {"num": 200, "str": "def"}, "num": 100, "str": "abc"}

L'état initial et le résultat après la sérialisation sont affichés. Vous pouvez confirmer qu'il peut être sérialisé normalement et qu'il n'y a aucun problème avec la sortie.

En guise de mise en garde, il doit être hérité par la classe PDO. Le fait est que le nom de la variable et le nom de la clé doivent être unifiés.

c'est tout. Je pensais l'avoir touché correctement Python est intéressant, non?

Recommended Posts

J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Je veux créer une fenêtre avec Python
Comment créer un fichier JSON en Python
Je veux facilement implémenter le délai d'expiration en python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai créé une classe en Python et essayé de taper du canard
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une classe pour rechercher des fichiers avec la méthode Glob de Python dans VBA
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
[Python / Django] Créer une API Web qui répond au format JSON
J'ai essayé d'implémenter PLSA dans Python 2
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
J'ai essayé d'implémenter PPO en Python
J'ai essayé de créer facilement une image 3D de haute précision avec une seule photo [1]. (La profondeur peut maintenant être modifiée en PNG.)
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
Je souhaite créer facilement un modèle de bruit
Un mémo que j'ai écrit un tri rapide en Python
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai écrit une classe en Python3 et Java
Vous pouvez facilement créer une interface graphique même avec Python
J'ai essayé d'implémenter TOPIC MODEL en Python
Python: créer une classe qui prend en charge l'affectation décompressée
J'ai essayé d'ajouter un module Python 3 en C
J'ai essayé d'implémenter le tri sélectif en python
Créez un plugin qui vous permet de rechercher les onglets Sublime Text 3 en Python
J'ai enregistré PyQCheck, une bibliothèque qui peut effectuer QuickCheck avec Python, dans PyPI.
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
J'ai essayé d'expliquer à quoi sert le générateur Python aussi facilement que possible.
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
[Azure] J'ai essayé de créer une machine virtuelle Linux avec Azure de Microsoft Learn
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
J'ai essayé de représenter graphiquement les packages installés en Python
Analyser une chaîne JSON écrite dans un fichier en Python
Je veux écrire en Python! (2) Écrivons un test