185 votes

Python - TypeError : L'objet de type 'int64' n'est pas sérialisable par JSON

J'ai un Dataframe qui stocke le nom du magasin et le nombre de ventes quotidiennes. J'essaie d'insérer ces données dans Salesforce en utilisant le script Python ci-dessous. J'obtiens cependant une erreur

TypeError : L'objet de type 'int64' n'est pas sérialisable par JSON.

La vue du Dataframe est donnée ci-dessous.

Storename,Count
Store A,10
Store B, 12
Store C, 5

J'utilise le code suivant pour l'insérer dans Salesforce

update_list = []
for i in range((len(store))):
    update_data = {
               'name' :    store['entity_name'].iloc[i],
                'count__c': store['count'].iloc[i] }

    update_list.append(update_data)

sf_data_cursor = sf_datapull.salesforce_login()
sf_data_cursor.bulk.Account.update(update_list)

L'erreur se produit lorsque la dernière ligne ci-dessus est exécutée. Quelqu'un peut-il m'aider à résoudre ce problème ? Merci.

181voto

Jie Yang Points 141

Vous pouvez définir votre propre encodeur pour résoudre ce problème.

import json
import numpy as np

class NpEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(NpEncoder, self).default(obj)

# Your codes .... 
json.dumps(data, cls=NpEncoder)

175voto

DYZ Points 26904

json ne reconnaît pas les types de données NumPy. Convertissez le nombre en un type de données Python int avant de sérialiser l'objet :

'count__c': int(store['count'].iloc[i])

2voto

MattClimbs Points 37

Une autre option consiste à utiliser, lors de la création du cadre de données, la méthode suivante dtype=str

Par exemple, si vous avez chargé store à partir d'un fichier csv :

import pandas as pd
store = pd.read_csv('store.csv', dtype=str)

Ensuite, tout a un type de str qui peut être sérialisé en json.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X