JSON
JSON تنسيق نصي يتكون من كائنات ومصفوفات وقيم، ويُستخدم في واجهات API والتعليقات التوضيحية ومخرجات النماذج. ويتناول هذا المفهوم قواعد الصياغة واستخدامات التعلم الآلي وJSON Lines والبرمجيات.
JSON، اختصارًا لـترميز كائنات JavaScript، هو تنسيق نصي خفيف لتخزين البيانات المنظّمة وتبادلها. حدّد دوغلاس كروكفورد مواصفاته في أوائل العقد الأول من القرن الحادي والعشرين، مستندًا إلى صياغة الكائنات الحرفية في JavaScript، وأصبح الآن موحّدًا بموجب RFC 8259 الصادر عن IETF وECMA-404. لا يعتمد JSON على لغة بعينها، وهو مقروء للبشر، وتدعمه مكتبة اللغة القياسية في جميع لغات البرمجة تقريبًا، ما يجعله التنسيق الافتراضي لواجهات API الويب. وفي تعلّم الآلة (ML)، ينقل التنبؤات من محركات الاستدلال، ويخزّن تعليقات مجموعات البيانات، ويسجّل البيانات الوصفية للتجارب، ويحدّد المخرجات المنظّمة لـنماذج اللغة الكبيرة (LLMs).
صياغة JSON#
يتكوّن مستند JSON من حاويتين وأربعة أنواع من القيم:
- الكائنات: مجموعات غير مرتبة من أزواج المفاتيح والقيم داخل أقواس معقوفة، مثل
{"name": "bus", "confidence": 0.94}. يجب أن تكون المفاتيح سلاسل نصية بين علامتي اقتباس مزدوجتين. - المصفوفات: قوائم مرتبة بين أقواس مربعة، مثل
[48.5, 398.0, 245.3, 902.1]. - القيم: سلاسل نصية أو أعداد أو القيم الحرفية
trueوfalseوnull، أو كائنات ومصفوفات متداخلة.
التنسيق صارم. لا يُسمح بالتعليقات، أو الفواصل الختامية، أو السلاسل المحاطة بعلامات اقتباس مفردة، أو القيمتين NaN وInfinity، مع أن وحدة Python json تكتب NaN افتراضيًا ما لم يُضبط allow_nan=False، فتنتج ملفات ترفضها المحللات الصارمة. ويحذّر RFC 8259 أيضًا من أن تبادل الأعداد لا يكون موثوقًا إلا ضمن دقة IEEE 754 المزدوجة، لذا تُرسل الأعداد الصحيحة الأكبر من 2⁵³ − 1، مثل بعض معرّفات قواعد البيانات، غالبًا كسلاسل نصية.
JSON في مسارات عمل تعلّم الآلة#
عندما ترسل كاميرا في نظام أمان إطارًا إلى خدمة كشف الكائنات، تجيب طبقة تقديم النموذج عادةً بصيغة JSON: سجل واحد لكل كائن مكتشف، يتضمن فئته ودرجة الثقة وإحداثيات الصندوق المحيط، جاهزًا للوحات المعلومات وتطبيقات الأجهزة المحمولة وقواعد بيانات المستندات مثل MongoDB.
تعتمد تنسيقات التعليقات التوضيحية على JSON أيضًا. تخزّن مجموعة بيانات COCO جميع تسميات أحد الأقسام في ملف JSON واحد يضم ثلاث قوائم رئيسية: images لأسماء الملفات وأحجامها، وcategories لمعرّفات الفئات وأسمائها، وannotations، حيث يشير كل إدخال إلى صورة وفئة باستخدام المعرّف، ويخزّن مربعًا بصيغة [x, y, width, height] بالبكسل انطلاقًا من الزاوية العلوية اليسرى. أما تنسيق YOLO فيستخدم بدلًا من ذلك ملفًا نصيًا لكل صورة بإحداثيات مركز مطبّعة، ويُعد التحويل بين التنسيقين خطوة اعتيادية في مسارات تعليق البيانات، مع إمكانية إنشاء فئة مخصصة لمجموعة البيانات أيضًا كي يدرّب YOLO مباشرةً على JSON الخاص بـCOCO.
يضع JSON Lines، المعروف أيضًا باسم NDJSON، كائن JSON كاملًا واحدًا في كل سطر. ويمكن عندئذٍ إلحاق الملفات بها وبثها وتقسيمها دون تحليل المستند بأكمله، ما يناسب سجلات التدريب وتدفقات التنبؤ ومجموعات بيانات التعليمات المستخدمة في الضبط الدقيق لنماذج LLMs. وبالنسبة إلى نماذج LLMs، يصف مخطط JSON الحقول الدقيقة التي يتوقعها التطبيق، وتقيّد المخرجات المنظّمة واستدعاء الدوال النموذجَ بإنتاج JSON يطابق هذا المخطط. ويطبّق GeoJSON، الموحّد بموجب RFC 7946، التنسيق على المعالم الجغرافية، ما يتيح لـتحليل صور الأقمار الصناعية وضع الكشوفات على الخريطة.
تحويل التنبؤات إلى JSON#
تسلسِل كائنات Results في Ultralytics YOLO تنبؤاتها باستخدام to_json()، فتكتب سجلًا واحدًا لكل كشف يتضمن اسم الفئة ومعرّفها والثقة وزوايا الصندوق x1 وy1 وx2 وy2، بالإضافة إلى إحداثيات القناع أو النقاط المفتاحية لنماذج تجزئة المثيلات وتقدير الوضعية. يشغّل المثال التالي YOLO26 على صورة نموذجية، ثم يحلّل JSON مجددًا باستخدام المكتبة القياسية في Python:
import json
from ultralytics import YOLO
# تحميل نموذج مدرّب مسبقًا لكشف الكائنات باستخدام YOLO26 وتشغيل الاستدلال
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# تسلسل كل كشف في سلسلة JSON نصية (كان من شأن normalize=True أن يطبّع الصناديق إلى النطاق 0-1)
json_string = result.to_json()
# يمكن لأي محلل JSON قراءة البيانات مجددًا، وهنا تُقرأ في قائمة من قواميس Python
detections = json.loads(json_string)
print(json.dumps(detections[0], indent=2))السجل المطبوع كائن JSON بمفاتيح name وclass وconfidence، وكائن متداخل box يحتوي إحداثيات الزوايا بالبكسل.
JSON مقارنةً بالتنسيقات ذات الصلة#
- YAML: تنسيق أسهل قراءةً، يتيح التعليقات والتداخل المعتمد على المسافات البادئة، ويشيع استخدامه في إعدادات التدريب وتعريفات مجموعات البيانات. صُمّم YAML 1.2 ليكون مجموعة شاملة من JSON، لذا فإن معظم مستندات JSON صالحة بصيغة YAML.
- XML: تنسيق قائم على الوسوم يُستخدم لتعليقات Pascal VOC التوضيحية، وهو أكثر إسهابًا من JSON ويدعم السمات ومساحات الأسماء والمخططات.
- CSV: تنسيق جدولي مسطّح وموجز للبيانات الجدولية، لكنه لا يدعم تداخل الكائنات أو القوائم.
- التنسيقات الثنائية: تكون Protocol Buffers وMessagePack أصغر حجمًا وأسرع تحليلًا من JSON، لكنها غير مقروءة للبشر. وتُخزّن ملفات نماذج ONNX كرسائل Protocol Buffers.










