عند طلب الإجابة بصيغة JSON، اشرح ما يمثل كل حقل ومتى تستعمل كل قيمة. قد يكون «عدد» رقما صحيحا في الشكل، لكنه عدد المقاعد المتاحة أو المحجوزة أو المطلوبة. الاتفاق على المعنى ضروري قبل استعمال النتيجة؛ لا يكفي أن تبدو الاستجابة ككائن مرتب يمكن قراءته آليا.
الخلاصة السريعة
عرف معنى كل حقل وقيمه الممكنة وحالة نقص المعلومة، ثم راجع القيم مع النص؛ الشكل المنظم لا يحدد المعنى نيابة عنك.
- حدد الشيء الذي يمثله الحقل ووحدته، ولا تكتف باسم قصير يمكن تفسيره بأكثر من طريقة.
- اكتب القيم المقبولة ومعنى كل منها؛ يتيح JSON Schema تحديد مجموعة قيم مسموحة بـenum. [1]
- بين معنى القيمة null في مهمتك؛ فهي ليست غياب الحقل نفسه ولا تساوي صفرا أو نصا فارغا. [2]
- افحص معنى القيم ومصدرها قبل استعمالها؛ كتابة طلب JSON وحدها ليست فحصا للناتج أو ضمانا لالتزامه.
عرف الحقل بما تقصده منه
نعد في مثال مستقل بطاقة لتجهيز لقاء صور افتراضي. النص يقول: «نحتاج عشرين كرسيا. قاعة النور مقترحة ولم تؤكد بعد؛ عدد الكراسي المتاحة فيها لم يبلغنا». طلب حقول place وcount وstatus وحده لا يبين إن كان العدد المطلوب أم المتاح، أو إن كانت الحالة تخص القاعة أم الكراسي.
نكتب بدلا من ذلك: «proposed_room هو اسم القاعة المقترحة كما ورد. required_chairs عدد الكراسي المطلوبة. available_chairs عدد المتاح المبلغ صراحة، بوحدة كرسي. room_status حالة تأكيد القاعة». هذه تعريفات من صاحب المهمة في مثالنا، وليست أسماء حقول معيارية لكل تطبيق. لم نجربها على نموذج.
اشرح القيم التي تختار منها
تتيح كلمة enum في JSON Schema تحديد مجموعة محدودة من القيم المقبولة. [1] لكننا نحتاج أيضا إلى تفسير اختيار كل قيمة بحسب بيانات المهمة.
نحدد room_status بثلاث قيم للمثال: proposed تعني أن القاعة اقترحت ولم يرد تأكيد، confirmed تعني ورود تأكيد صريح، وrejected تعني رفضا صريحا. قائمة القيم لا تحسم الاختيار بمفردها؛ الاسم «النور» لا يثبت التأكيد. وإذا كانت الرسالة لا تبين أي حالة، فحدد مسارا مستقلا للمعلومة الناقصة، ولا تجبرها على أقرب قيمة كي تنجح القائمة.
فرق بين الصفر وغير المعلوم
يوضح مرجع JSON Schema أن null قيمة مستقلة، وأن وجودها يختلف عن غياب الخاصية؛ ولا تعادل صفرا أو نصا فارغا. [2]
نختار في المثال null للعدد المتاح غير المبلغ، ونشرح هذا المعنى في الأمر. أما available_chairs: 0 فيعني أن المصدر أبلغ عدم وجود كراس متاحة، وهو أمر لم تقله الرسالة. عدد مطلوب مقداره 20 لا يملأ حقل المتاح. وإذا كان برنامجك لا يقبل null، فغير اتفاق تمثيل النقص بوضوح، ولا تضع صفرا كي تتجاوز المشكلة.
راجع المعنى قبل استخدام الكائن
ناتج توضيحي مكتوب للمقال، لا رد نموذج: {"proposed_room":"النور","required_chairs":20,"available_chairs":null,"room_status":"proposed"}. نراجع كل قيمة بتعريف حقلها وعبارة النص التي تسندها. إذا ظهرت confirmed، فلن يعوض صحة هجائها غياب التأكيد من المصدر.
افحص أيضا الشكل بالمحلل أو الأداة المناسبة إن ستنقل البيانات إلى برنامج. هذا فحص منفصل عن مطابقة المعنى: قد يقرأ البرنامج JSON ويقبل الحقول بينما يفسرها وفق اتفاق مختلف. وضح طريقة الطلب والأداة المستعملة؛ المقال يقدم تعريفا ومراجعة مقترحين، ولا يفعل نمط مخرجات مقيدا أو يثبت أن كل نموذج سيلتزم به.
المصادر ومتابعة القراءة
- JSON Schema: Enumerated and constant values (يفتح في نافذة جديدة)json-schema.org
- JSON Schema: null (يفتح في نافذة جديدة)json-schema.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
