لماذا صار السعر 45.50 يظهر 45.5 بعد تنسيق ملف JSON؟ هل تغيّرت القيمة؟

لا، القيمة لم تتغير. العدد 45.50 والعدد 45.5 هما القيمة نفسها، ومنسّق JSON يحلل النص إلى أعداد ثم يعيد كتابتها بأقصر صيغة، فتسقط الأصفار في آخر الكسر: 45.50 تصبح 45.5 و120.00 تصبح 120. وإن كان نظامك يحتاج الشكل المكتوب نفسه، بخانتين عشريتين مثلًا، فاحفظ السعر نصًا بين علامتي تنصيص أو نسّقه حيث يُعرض.

نُشر في · دقائق قراءة: 2

المثال

سطر من ملف أسعار:

{"price":45.50,"old":120.00}

بعد التصغير في الأداة:

{"price":45.5,"old":120}

انخفض الحجم من 28 بايت إلى 24 بايت، والفرق كله أصفار وفاصلة عشرية. والشيء نفسه مع التنسيق بمسافتين: يظهر السعر 45.5 والسعر القديم 120.

لماذا يحدث هذا؟

الأداة لا تنسّق النص حرفًا بحرف، بل تقرؤه بمحلّل JSON الحقيقي في المتصفح، فيتحول 45.50 إلى عدد في الذاكرة. والعدد في الذاكرة لا يتذكر كيف كُتب: لا يعرف أن كاتبه وضع صفرًا في الآخر. حين تعيد الأداة كتابة البيانات يُكتب كل عدد بأقصر صيغة تعطي القيمة نفسها. أمثلة من التجربة نفسها: 1.10 تصبح 1.1، و0.150 تصبح 0.15، و3.0e2 تصبح 300.

هذا ليس خطأ في الأداة، بل هو ما يفعله أي برنامج يقرأ JSON ثم يكتبه. الفرق أن الأداة تذكر ذلك صراحة في حدودها، وأنك رأيته قبل أن يفاجئك في مكان آخر.

هل يهمك ذلك؟

  • لا يهم إن كان النظام الذي يستقبل الملف يقرأ السعر عددًا: 45.5 و45.50 عنده شيء واحد، وسيعرضه كما هو مضبوط في إعداداته.
  • يهم إن كان النظام يعرض النص كما هو دون تنسيق، فيظهر للعميل 45.5 ريال بدل 45.50.
  • يهم إن كنت تقارن الملف قبل التنسيق وبعده حرفًا بحرف، فستظهر كل الأسعار كأنها تغيرت.

الحل: السعر نصًا حين تحتاج شكله

إن احتجت الشكل المكتوب بالضبط، فاجعل السعر نصًا بين علامتي تنصيص في المصدر:

{"price":"45.50","old":"120.00"}

هنا لا تغيّر الأداة شيئًا، فالحجم 32 بايت قبل وبعد، لأن النصوص تبقى كما هي حرفًا بحرف. لكن تأكد أن النظام المستقبل يقبل السعر نصًا، فبعض الأنظمة تشترط عددًا. راجع توثيق النظام الذي ترسل إليه.

الخطوات للتحقق

  1. افتح منسّق ومدقّق JSON والصق الملف.
  2. اختر «تنسيق» وانظر إلى الأسعار في الناتج: أي عدد انتهى بصفر في الأصل سيظهر دونه.
  3. قرر: إن كان النظام يقرأ الأعداد فلا تفعل شيئًا، وإن كان يعرض النص كما هو فغيّر طريقة كتابة الأسعار في المصدر.

وإن كانت الأسعار أصلًا في جدول وحوّلتها إلى JSON عبر محوّل CSV و JSON، فانتبه أن ذلك المحوّل يبقي القيم نصوصًا افتراضيًا، أي "45.50" كما هي، إلا إن فعّلت فيه تحويل الأعداد.

أسئلة شائعة

هل يمكن أن تتغير القيمة نفسها؟

في الأسعار العادية لا. التغيير الحقيقي في القيمة يحدث مع الأعداد الصحيحة الطويلة جدًا فوق 9007199254740991، والأداة تحذّر منها.

هل تحذف الأداة الأصفار في النصوص أيضًا؟

لا. ما بين علامتي التنصيص يبقى كما هو.

هل يمكن إيقاف هذا السلوك؟

لا، هو جزء من إعادة الكتابة. الحل الوحيد أن يكون السعر نصًا في المصدر.