UBJSON

يُعدّ تنسيق JSON الثنائي العالمي ( UBJSON ) تنسيقًا لتبادل البيانات الحاسوبية . وهو شكل ثنائي يُحاكي JSON مباشرةً ، ولكنه يتطلب عددًا أقل من البايتات من البيانات. ويهدف إلى تحقيق عمومية JSON، بالإضافة إلى سهولة معالجته مقارنةً به.

الأساس المنطقي والأهداف

يُعدّ UBJSON خليفةً مقترحاً لـ BSON و BJSON وغيرها. ويهدف UBJSON إلى تحقيق الأهداف التالية:

  • التوافق التام مع مواصفات JSON - هناك تطابق تام بين JSON القياسي و UBJSON.
  • سهولة التنفيذ - تضمين أنواع البيانات المدعومة على نطاق واسع في لغات البرمجة الشائعة فقط، بحيث لا توجد مشاكل تتعلق بعدم دعم لغات معينة بشكل جيد.
  • سهولة الاستخدام - يمكن فهمه واعتماده بسرعة.
  • السرعة والكفاءة - يستخدم UBJSON تمثيلات بيانات أصغر بنسبة 30% تقريبًا من نظيراتها المضغوطة بتنسيق JSON، وهي مُحسَّنة لتحليل سريع. يدعم UBJSON التسلسل المتدفق، مما يعني إمكانية بدء إرسال البيانات عبر اتصال الشبكة قبل معرفة حجمها النهائي.

أنواع البيانات وبنية الجملة

يمكن أن تكون بيانات UBJSON إما قيمة أو حاوية .

أنواع القيم

يستخدم UBJSON صفًا ثنائيًا واحدًا لتمثيل جميع أنواع قيم JSON: [ 1 ]

 النوع [الطول] [البيانات]

يتم تعريف كل عنصر في المجموعة على النحو التالي:

يكتب

النوع عبارة عن حرف ASCII أحادي البايت يُستخدم للإشارة إلى نوع البيانات التي تليه. تم اختيار أحرف ASCII لتسهيل استعراض البيانات المخزنة بتنسيق UBJSON وتصحيح أخطائها يدويًا قدر الإمكان (مثل جعل البيانات قابلة للقراءة نسبيًا في محرر سداسي عشري). تتوفر أنواع لأنواع قيم JSON الخمسة. يوجد أيضًا نوع لا يُفعّل أي عملية يُستخدم للحفاظ على استمرارية تدفق البيانات.

يتم تمثيل الأرقام عالية الدقة كقيمة رقمية طويلة بشكل تعسفي، مشفرة بسلسلة UTF-8.

الطول (اختياري)

يمثل الطول عددًا صحيحًا (مثل uint8 أو int64) يُشفّر حجم حمولة البيانات بالبايت. ويُستخدم هذا الطول مع السلاسل النصية والأعداد عالية الدقة، ويمكن استخدامه أيضًا مع الحاويات. أما مع الأنواع الأخرى، فيتم حذفه.

helloيتم ترميز الطول وفقًا لنفس اصطلاح ترميز الأعداد الصحيحة، وبالتالي يتضمن نوعه الخاص. على سبيل المثال، يتم ترميز السلسلة كالتالي S: , U,0x05 h, e, l, l, o.

البيانات (اختياري)

سلسلة من البايتات تمثل البيانات الثنائية الفعلية لهذا النوع من القيم. جميع الأرقام مرتبة وفقًا لترتيب البايتات الكبيرة (Big-Endian) .

أنواع الحاويات

على غرار JSON، يحدد UBJSON نوعين من الحاويات : المصفوفة والكائن . [ 2 ]

المصفوفات عبارة عن تسلسلات مرتبة من العناصر، يتم تمثيلها على شكل [متبوعة بصفر أو أكثر من العناصر من نوع القيمة والحاوية ولاحقة ].

الكائنات عبارة عن مجموعات مُصنفة من العناصر، ممثلة بـ {متبوعة بصفر أو أكثر من أزواج المفتاح والقيمة و }. كل مفتاح عبارة عن سلسلة نصية مع Sحذف الحرف ، ويمكن أن تكون كل "قيمة" أي عنصر من نوع القيمة أو الحاوية.

بدلاً من ذلك، يمكن للمصفوفات والكائنات الإشارة إلى عدد العناصر التي تحتويها #برقم صحيح متبوعًا بأول عنصر، وفي هذه الحالة يُحذف الرقم الأخير ]. }بالإضافة إلى ذلك، إذا كانت جميع العناصر من نفس النوع، فيمكن حذف الأنواع واستبدالها برقم واحد متبوعًا بالنوع، وفي هذه الحالة يجب ذكر عدد العناصر مباشرةً بعد ذلك. على سبيل المثال، يمكن تمثيل $المصفوفة [" a " ," b ","c"] على النحو التالي [: 0x03 , ...$C#Uabc

البيانات الثنائية

على الرغم من عدم وجود نوع ثنائي صريح، تُخزَّن البيانات الثنائية في مصفوفة ذات نوع بيانات محدد من قيم uint8. يضمن هذا كفاءة البيانات الثنائية مع الحفاظ على التوافق مع JSON، على الرغم من أن JSON لا يدعم البيانات الثنائية بشكل مباشر. [ 3 ] [ 4 ]

التمثيل

يُوصى باستخدام نوع MIME " application/ubjson"، وكذلك امتداد الملف ".ubj" عند تخزينه في نظام الملفات. [ 4 ]

دعم البرامج

  • قاعدة بيانات Teradata [ 5 ]
  • أضافت لغة Wolfram دعمًا لـ UBJSON في عام 2017، مع الإصدار 11.1 من اللغة. [ 4 ]

انظر أيضاً

مراجع

  1. "أنواع القيم | مواصفات JSON الثنائية العالمية" . تم الاطلاع عليه بتاريخ 20 يوليو 2019 .
  2. "أنواع الحاويات | مواصفات JSON الثنائية العالمية" . تم الاطلاع عليه بتاريخ 20 يوليو 2019 .
  3. "البيانات الثنائية | مواصفات JSON الثنائية العالمية" . تم الاطلاع عليه بتاريخ 20 يوليو 2019 .
  4. 1 2 3 "UBJSON (.ubj) توثيق لغة Wolfram" . تم الاطلاع عليه بتاريخ 20 يوليو 2019 .
  5. "تنسيق تخزين UBJSON" . تم الاطلاع عليه بتاريخ 20 يوليو 2019 .