Je souhaite générer une sortie lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python

Je souhaite générer un résultat lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python.

TypeError se produit dans un dictionnaire contenant des types non pris en charge

Vous pouvez utiliser json.dumps (json.dump) lorsque vous essayez de convertir dict en json en python. À ce stade, si une valeur d'un type non pris en charge est incluse, l'exception suivante se produit.

# TypeError: datetime.datetime(2000, 1, 1, 0, 0) is not JSON serializable

Par exemple, si la personne du dictionnaire comprenant l'objet datetime est définie sur la spécification json.dumps, le résultat sera le suivant.

import json
from datetime import datetime

person = {
    "name": "Foo",
    "age": 20,
    "created_at": datetime(2000, 1, 1)
}

json.dumps(person)
# TypeError: datetime.datetime(2000, 1, 1, 0, 0) is not JSON serializable

En donnant une fonction à l'argument par défaut, il est possible de définir un rappel pour un type non pris en charge.

json.dumps peut prendre plusieurs arguments.

json.dumps = dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, inden
t=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)
    Serialize ``obj`` to a JSON formatted ``str``.
...

Si vous attribuez la fonction suivante à l'argument par défaut dans this, vous pouvez spécifier le mappage pour l'argument non pris en charge ultérieurement.

def support_datetime_default(o):
    if isinstance(o, datetime):
        return o.isoformat()
    raise TypeError(repr(o) + " is not JSON serializable")

Vous pouvez maintenant le convertir avec json.dumps.

person = {
    "name": "Foo",
    "age": 20,
    "created_at": datetime(2000, 1, 1)
}


json.dumps(person, default=support_datetime_default)
# {"created_at": "2000-01-01T00:00:00", "age": 20, "name": "Foo"}

Ou créez une classe qui hérite de JSONEncoder

Vous pouvez changer la classe utilisée pour la conversion en json.dumps avec l'argument cls (json.JSONEncoder est utilisé par défaut) Par conséquent, vous pouvez définir une classe qui hérite de JSONEncoder comme indiqué ci-dessous et la transmettre à cls.

class DateTimeSupportJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime):
            return o.isoformat()
        return super(DateTimeSupportJSONEncoder, self).default(o)

json.dumps(person, cls=DateTimeSupportJSONEncoder)
# {"created_at": "2000-01-01T00:00:00", "age": 20, "name": "Foo"}

Recommended Posts

Je souhaite générer une sortie lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python
Je veux sortir le début du mois prochain avec Python
Je veux initialiser si la valeur est vide (python)
Que faire lorsque le type de valeur est ambigu en Python?
Je veux afficher le nombre de num_boost_round lorsque early_stopping est appliqué à l'aide du rappel XGBoost (non atteint)
Je souhaite résoudre le problème de fuite de mémoire lors de la sortie d'un grand nombre d'images avec Matplotlib
Je suis tombé sur un code de caractère lors de la conversion de CSV en JSON avec Python
[Golang] Je veux ajouter omitempty à la balise json du champ de type int de la structure afin qu'il soit ignoré si 0 est entré.
[Python Data Frame] Lorsque la valeur est vide, remplissez-la avec la valeur d'une autre colonne.
Utilisez Ruby et Python pour trouver la probabilité qu'une carte avec un nombre naturel de 1 à 100 soit un multiple de 3 et non un multiple de 5.
Je veux hériter de l'arrière avec la classe de données python
Lors de l'écriture dans un fichier csv avec python, une histoire que j'ai fait une légère erreur et n'a pas respecté la date de livraison
J'ai essayé de trouver l'entropie de l'image avec python
Je souhaite spécifier une autre version de Python avec pyvenv
Je veux connaître la nature de Python et pip
Keras Je veux obtenir la sortie de n'importe quelle couche !!
[Python3] Liste des sites auxquels j'ai fait référence lorsque j'ai lancé Python
Je souhaite extraire une URL arbitraire de la chaîne de caractères de la source html avec python
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
Lors de l'incrémentation de la valeur d'une clé qui n'existe pas
Convertir en chaîne lors de la sortie de la sortie standard avec le sous-processus Python
L'histoire selon laquelle la version de python 3.7.7 n'était pas adaptée à Heroku
Comment ne pas échapper au japonais en traitant avec JSON en Python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je veux connaître la météo avec LINE bot avec Heroku + Python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Je veux exécuter l'interface graphique Python au démarrage de Raspberry Pi
Spécification du fuseau horaire lors de la conversion d'une chaîne de caractères en type datetime avec python
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Je veux vérifier la position de mon visage avec OpenCV!
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
Je veux déboguer avec Python
J'étais fatigué de Python, alors j'ai analysé les données avec nehan (lié à Corona, est-ce que ce mot est maintenant?)
J'ai essayé de sortir la liste rpm de la destination de connexion SSH sur une feuille Excel avec Python + openpyxl.
Je veux me mettre en colère contre ma mère quand la mémoire est serrée
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
Avec PEP8 et PEP257, un codage Python qui n'est pas gênant à montrer aux gens!
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
Je veux exprimer mes sentiments avec les paroles de Mr. Children
Je souhaite arrêter la suppression automatique de la zone tmp dans RHEL7
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
[Introduction à Python] Quelle est la méthode de répétition avec l'instruction continue?
J'ai mesuré la vitesse de la notation d'inclusion de liste, pendant et pendant avec python2.7.
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Je souhaite lire le CSV ligne par ligne lors de la conversion du type de champ (tout en affichant la barre de progression) et le traiter.
Je veux empêcher le haut-parleur connecté au Raspberry Pi (jessie) d'être bonked lorsque le système d'exploitation est redémarré (script Python)
Comment gérer le problème de déformation des caractères japonais lors de la sortie de journaux à l'aide du formateur de journaux JSON
[Python] Comment gérer l'erreur d'instance is "is instance () arg 2 doit être un type ou un tuple de types"
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois
Je suis un amateur le 14e jour de python, mais je veux essayer l'apprentissage automatique avec scicit-learn
Je veux sortir froidement sur la console
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
[python] [meta] Le type de python est-il un type?
Je veux obtenir le chemin du répertoire où le fichier en cours d'exécution est stocké.