Par exemple, si DynamoDB gère des données numériques de type int / float, les données seront récupérées sous forme décimale. Lorsque j'exécute json.dumps standard de python sur des requêtes et que j'obtiens des éléments contenant ce type de données, j'obtiens une exception en raison du type qui ne peut pas être converti. Donc, j'oublie toujours comment gérer cela, alors je vais laisser une note. (Similaire et similaire se produit avec le type Datetime) Si json.dumps échoue avec une erreur de type, vous pouvez le gérer en fournissant une fonction de conversion.
Vous pouvez spécifier default comme argument de json.dumps. En définissant une fonction de conversion ici, vous pouvez gérer vous-même le type non cible et le convertir en votre type préféré. Extrait du fonctionnaire ci-dessous
Si vous spécifiez> default, spécifiez une fonction, et cette fonction sera appelée pour les objets qui ne peuvent pas être sérialisés autrement. La fonction doit renvoyer l'objet dans une version codée JSON ou déclencher une TypeError. S'il n'est pas spécifié, TypeError sera levé.
Préparez une fonction de conversion.
from decimal import Decimal
def decimal_to_int(obj):
if isinstance(obj, Decimal):
return int(obj)
Lors de l'exécution de json.dump
json.dumps(your_val, default=decimal_to_int)
Définissez simplement la fonction de conversion dans l'argument par défaut.
Cette fois, je n'ai écrit que pour convertir des décimales, mais si vous préparez la vérification de type et la logique de conversion attendues pour la fonction de conversion de type, il est possible de prendre en charge plusieurs types. Par exemple, datetime est renvoyé sous la forme d'une chaîne formatée avec strftime. Donc, il serait utile que vous puissiez comprendre la structure des fonctions que vous utilisez pour acquis. Donc, si vous voulez bien le comprendre, veuillez vérifier ici.
C'est un article très court, mais je l'oublie toujours, donc c'est presque mon propre mémo.
simplejson semble prendre en charge de nombreux types. Je ne l'ai jamais utilisé. Si vous souhaitez l'utiliser avec AWS Lambda, il n'est pas inclus dans le package standard, donc [Ajoutez-le vous-même au package](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-package. Vous devez vous inscrire en tant que [html) ou Lambda Layer.
Recommended Posts