غالبًا ما يظهر خطأ “TypeError: Object of type ‘int64’ is not JSON serializable” عند العمل مع مكتبات مثل Pandas و NumPy في Python. يحدث هذا لأن JSON لا يدعم بشكلٍ أساسي نوع بيانات NumPy `int64`. يقدم هذا الدليل حلولاً لحل هذه المشكلة.
محتويات
- تحويل ‘int64’ إلى أنواع Python القياسية
- معالجة الأعداد الكبيرة المحتملة
- تحويل ‘int64’ إلى سلاسل نصية
- أفضل الممارسات لتحويل البيانات إلى صيغة JSON
تحويل ‘int64’ إلى أنواع Python القياسية
الحل الأكثر شيوعًا والأفضل غالبًا هو تحويل قيم `int64` إلى أعداد صحيحة قياسية في Python (`int`) أو أعداد عشرية (`float`). يحافظ هذا على البيانات العددية مع ضمان توافق JSON.
مثال Pandas:
import pandas as pd
import json
data = {'col1': [1, 2, 3, 4, 5, 2**63]} # يتضمن عددًا كبيرًا
df = pd.DataFrame(data)
# التحويل إلى عدد صحيح (سيؤدي إلى OverflowError للأعداد الكبيرة)
try:
df['col1'] = df['col1'].astype(int)
json_data = json.dumps(df.to_dict('records'))
print(f"تحويل عدد صحيح: {json_data}")
except OverflowError:
print("حدث خطأ OverflowError أثناء تحويل عدد صحيح.")
# التحويل إلى عدد عشري (يعالج الأعداد الكبيرة)
df['col1'] = df['col1'].astype(float)
json_data = json.dumps(df.to_dict('records'))
print(f"تحويل عدد عشري: {json_data}")
مثال NumPy:
import numpy as np
import json
arr = np.array([1, 2, 3, 4, 5, 2**63], dtype=np.int64)
# التحويل إلى عدد صحيح (سيؤدي إلى OverflowError للأعداد الكبيرة)
try:
arr = arr.astype(int)
json_data = json.dumps(arr.tolist())
print(f"تحويل عدد صحيح: {json_data}")
except OverflowError:
print("حدث خطأ OverflowError أثناء تحويل عدد صحيح.")
# التحويل إلى عدد عشري (يعالج الأعداد الكبيرة)
arr = arr.astype(float)
json_data = json.dumps(arr.tolist())
print(f"تحويل عدد عشري: {json_data}")
معالجة الأعداد الكبيرة المحتملة
إذا كانت قيم `int64` الخاصة بك قد تتجاوز القيمة القصوى التي يمكن تمثيلها بواسطة عدد صحيح قياسي في Python، فإن التحويل إلى `float` ضروري لمنع حدوث `OverflowError`. يمكن للأعداد العشرية التعامل مع نطاق أوسع بكثير من القيم العددية.
تحويل ‘int64’ إلى سلاسل نصية
يُعد التحويل إلى سلاسل نصية بديلاً مباشرًا إذا لم تكن بحاجة إلى إجراء عمليات حسابية على البيانات بعد التحويل إلى JSON. هذا نهج قوي يتجنب مشاكل تجاوز السعة المحتملة.
import pandas as pd
import json
data = {'col1': [1, 2, 3, 4, 5, 2**63]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].astype(str)
json_data = json.dumps(df.to_dict('records'))
print(json_data)
أفضل الممارسات لتحويل البيانات إلى صيغة JSON
لكود أنظف وأسهل في الصيانة، تعامل باستمرار مع أنواع البيانات قبل التحويل إلى JSON. ضع في اعتبارك استخدام مكتبة تحويل مخصصة إذا كانت هياكل البيانات الخاصة بك معقدة. دائمًا ما تختار بعناية طريقة التحويل المناسبة (عدد صحيح، عدد عشري، أو سلسلة نصية) بناءً على متطلبات تطبيقك المحدد.