Der Fehler „TypeError: Object of type ‚int64‘ is not JSON serializable“ tritt häufig bei der Arbeit mit Bibliotheken wie Pandas und NumPy in Python auf. Dies liegt daran, dass JSON den NumPy-Datentyp `int64` nicht standardmäßig unterstützt. Diese Anleitung zeigt Lösungen zur Behebung dieses Problems.
Inhaltsverzeichnis
- Konvertierung von ‚int64‘ in Standard-Python-Typen
- Handhabung potenziell großer Zahlen
- Konvertierung von ‚int64‘ in Strings
- Best Practices für die Datenserialisierung
Konvertierung von ‚int64‘ in Standard-Python-Typen
Die gängigste und oft bevorzugte Lösung ist die Konvertierung von `int64`-Werten in Standard-Python-Ganzzahlen (`int`) oder Gleitkommazahlen (`float`). Dies erhält die numerischen Daten und stellt gleichzeitig die JSON-Kompatibilität sicher.
Pandas-Beispiel:
import pandas as pd
import json
data = {'col1': [1, 2, 3, 4, 5, 2**63]} # Enthält eine große Zahl
df = pd.DataFrame(data)
# Konvertierung in int (führt bei großen Zahlen zu OverflowError)
try:
df['col1'] = df['col1'].astype(int)
json_data = json.dumps(df.to_dict('records'))
print(f"Integer-Konvertierung: {json_data}")
except OverflowError:
print("OverflowError während der Integer-Konvertierung aufgetreten.")
# Konvertierung in float (verarbeitet große Zahlen)
df['col1'] = df['col1'].astype(float)
json_data = json.dumps(df.to_dict('records'))
print(f"Float-Konvertierung: {json_data}")
NumPy-Beispiel:
import numpy as np
import json
arr = np.array([1, 2, 3, 4, 5, 2**63], dtype=np.int64)
# Konvertierung in int (führt bei großen Zahlen zu OverflowError)
try:
arr = arr.astype(int)
json_data = json.dumps(arr.tolist())
print(f"Integer-Konvertierung: {json_data}")
except OverflowError:
print("OverflowError während der Integer-Konvertierung aufgetreten.")
# Konvertierung in float (verarbeitet große Zahlen)
arr = arr.astype(float)
json_data = json.dumps(arr.tolist())
print(f"Float-Konvertierung: {json_data}")
Handhabung potenziell großer Zahlen
Wenn Ihre `int64`-Werte den maximalen Wert übersteigen, der von einer Standard-Python-Ganzzahl darstellbar ist, ist die Konvertierung in `float` unerlässlich, um `OverflowError` zu vermeiden. Floats können einen viel größeren Bereich numerischer Werte verarbeiten.
Konvertierung von ‚int64‘ in Strings
Die Konvertierung in Strings ist eine einfache Alternative, wenn Sie nach der Serialisierung keine mathematischen Operationen mit den Daten durchführen müssen. Dies ist ein robuster Ansatz, der potenzielle Überlaufprobleme vermeidet.
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)
Best Practices für die Datenserialisierung
Für einen saubereren Code und einfachere Wartung sollten Datentypen vor der Serialisierung konsistent behandelt werden. Verwenden Sie eine dedizierte Serialisierungsbibliothek, wenn Ihre Datenstrukturen komplex sind. Wählen Sie immer die geeignete Konvertierungsmethode (int, float oder String) basierend auf den Anforderungen Ihrer spezifischen Anwendung.