我有一个存储商店名称和每日销售计数的数据框架。我正在尝试使用下面的Python脚本将其插入到Salesforce中。
但是,我得到以下错误:
TypeError: Object of type 'int64' is not JSON serializable
下面是数据框的视图。
Storename,Count
Store A,10
Store B,12
Store C,5
我使用以下代码将其插入到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)
当上面的最后一行被执行时,我得到了错误。
我该如何解决这个问题?
发布于 2018-06-19 04:07:03
json
不识别NumPy数据类型。在序列化对象之前,将数字转换为Python int
:
'count__c': int(store['count'].iloc[i])
发布于 2019-09-13 06:29:54
你可以定义你自己的编码器来解决这个问题。
import json
import numpy as np
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
if isinstance(obj, np.floating):
return float(obj)
if isinstance(obj, np.ndarray):
return obj.tolist()
return super(NpEncoder, self).default(obj)
# Your codes ....
json.dumps(data, cls=NpEncoder)
发布于 2020-05-20 10:08:53
我将把我对ring的回答作为@Jie Yang的excellent solution的一个更稳定的版本。
我的解决方案
from numpyencoder import NumpyEncoder
numpy_data = np.array([0, 1, 2, 3])
with open(json_file, 'w') as file:
json.dump(numpy_data, file, indent=4, sort_keys=True,
separators=(', ', ': '), ensure_ascii=False,
cls=NumpyEncoder)
细目
如果你深入研究numpyencoder/numpyencoder.py
文件中的hmallen's代码,你会发现它与@Jie Yang的答案非常相似:
class NumpyEncoder(json.JSONEncoder):
""" Custom encoder for numpy data types """
def default(self, obj):
if isinstance(obj, (np.int_, np.intc, np.intp, np.int8,
np.int16, np.int32, np.int64, np.uint8,
np.uint16, np.uint32, np.uint64)):
return int(obj)
elif isinstance(obj, (np.float_, np.float16, np.float32, np.float64)):
return float(obj)
elif isinstance(obj, (np.complex_, np.complex64, np.complex128)):
return {'real': obj.real, 'imag': obj.imag}
elif isinstance(obj, (np.ndarray,)):
return obj.tolist()
elif isinstance(obj, (np.bool_)):
return bool(obj)
elif isinstance(obj, (np.void)):
return None
return json.JSONEncoder.default(self, obj)
https://stackoverflow.com/questions/50916422
复制相似问题