نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
العودة للتغريدات
مشكلةتم الحل

حل أيرور TypeError: Object of type Decimal is not JSON serializable في Python

M
mahmoud
·١٦ يوليو ٢٠٢٦·5 مشاهدة
يا جماعة أنا بكتب API بـ Python وبجلب بيانات مبيعات أو أسعار منتجات من قاعدة البيانات عشان أرجعها لليوزر في شكل JSON Response. المطلوب: تحويل قاموس (Dictionary) فيه بيانات المنتج للغة JSON باستخدام دالة json.dumps().
المشكلة اللي مقابلاني: أول ما الكود يوصل لسطر تحويل البيانات لـ JSON الابلكيشن بيضرب وبيطلعلي الأيرور ده:
Bash
TypeError: Object of type Decimal is not JSON serializable
المشكلة إن البيانات جاية من قاعدة البيانات وفيها مبالغ مالية وأسعار معرّفة بنوع Decimal في البايثون، والـ JSON مش قادر يتعرف عليها كأرقام!
الكود البرمجي (المشكلة)
Python
import json
from decimal import Decimal

# البيانات راجعة من قاعدة البيانات بالشكل ده
product_data = {
    "id": 101,
    "name": "كيبورد ميكانيكي",
    "price": Decimal('1250.50'),  # نوع البيانات هنا Decimal
    "in_stock": True
}

# السطر اللي بيضرب وبيطلع TypeError
json_output = json.dumps(product_data, ensure_ascii=False)

print(json_output)
مشاكل-بايثونكود-pythonأخطاء-jsonمشاكل-djangoأخطاء-typeerrorبرمجة-back-endتحويل-json-بايثونحل-مشاكل-python

التعليقات (2)

الحل المعتمد
abdelrahman
abdelrahmanمنذ 90 يوم
سبب المشكلة: مكتبة json القياسية في بايثون بتعرف تتعامل وتترجم أنواع محددة بس لـ JSON زي (int, float, str, list, dict, bool, None). نوع البيانات Decimal (المستخدم لدقة الحسابات المالية) مش مدمج افتراضياً داخل محول الـ JSON في بايثون، فالمكتبة مش بتبقى عارفة تحوله لـ String ولا لـ Float فتطلع الخطأ ده. الحل الصحيح والنهائي: تمرير محول مخصص (Custom Serializer Handler) للدالة json.dumps باستخدام المعامل default ليقوم بتحويل أي كائن من نوع Decimal إلى float (أو str حسب الرغبة) أثناء عملية التحويل:
Python
import json
from decimal import Decimal

product_data = {
    "id": 101,
    "name": "كيبورد ميكانيكي",
    "price": Decimal('1250.50'),
    "in_stock": True
}

# دالة معالجة الأنواع غير المدمجة
def decimal_serializer(obj):
    if isinstance(obj, Decimal):
        return float(obj) # أو str(obj) لو محتاج تحفظ الدقة كاملة بدون تقريب
    raise TypeError(f"Object of type {type(obj).__name__} is not JSON serializable")

# تمرير الدالة للـ default parameter
json_output = json.dumps(product_data, default=decimal_serializer, ensure_ascii=False)

print(json_output)
# Output: {"id": 101, "name": "كيبورد ميكانيكي", "price": 1250.5, "in_stock": true}
L
lomoمنذ 90 يوم
ممتاز يا هندسة

سجّل دخولك لإضافة تعليق

تسجيل الدخول
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر