بث JSON

تتضمن تقنية بث JSON بروتوكولات اتصال لتحديد كائنات JSON المبنية على بروتوكولات تدفق منخفضة المستوى (مثل TCP )، مما يضمن التعرف على كل كائن JSON على حدة، حتى عندما يستخدم الخادم والعملاء نفس الكائن (كما هو مُضمن في الكود). هذا ضروري لأن JSON بروتوكول غير تجميعي (دمج كائنين JSON لا ينتج عنه كائن JSON صالح).

مقدمة

يُعدّ JSON تنسيقًا شائعًا لتبادل بيانات الكائنات بين الأنظمة. غالبًا ما تكون هناك حاجة لإرسال سلسلة من الكائنات عبر اتصال واحد، مثل مؤشر أسعار الأسهم أو سجلات تطبيقات النظام . [ 1 ] في هذه الحالات، تبرز الحاجة إلى تحديد نهاية كل كائن مُشفّر بصيغة JSON وبداية الكائن التالي. يُعرف هذا تقنيًا باسم "التأطير" .

هناك أربع طرق شائعة لتحقيق ذلك:

  • أرسل كائنات JSON منسقة بدون أسطر جديدة واستخدم سطرًا جديدًا كفاصل. [ 2 ]
  • أرسل كائنات JSON المدمجة مع حرف تحكم فاصل السجلات كفاصل. [ 3 ]
  • أرسل كائنات JSON متسلسلة بدون فواصل واعتمد على محلل تدفق البيانات لاستخراجها.
  • أرسل كائنات JSON مسبوقة بطولها واعتمد على محلل التدفق لاستخراجها.

مقارنة

يعمل تنسيق JSON المفصول بأسطر بشكل جيد للغاية مع الأدوات التقليدية الموجهة نحو الأسطر .

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

يتوافق تنسيق JSON المُسبق بالطول مع تنسيق JSON المُنسق بشكل جميل. لا يعمل بكفاءة مع الأدوات التقليدية التي تعتمد على الأسطر، ولكنه قد يُوفر مزايا في الأداء مقارنةً بالتدفقات المُفصولة بأسطر أو المُدمجة. كما أنه قد يكون أسهل في التحليل.

الأساليب

JSON مفصول بأسطر جديدة

هناك مصطلحان يُستخدمان لوصف التنسيقات المتكافئة لملفات JSON المفصولة بأسطر:

تستفيد تقنية البث من حقيقة أن تنسيق JSON لا يسمح باستخدام أحرف الإرجاع أو السطر الجديد ضمن القيم الأولية (في السلاسل النصية، يجب تهريبها باستخدام ` \` \rو`\ \n` على التوالي)، وأن معظم مُنسِّقات JSON لا تُضمِّن افتراضيًا أي مسافات بيضاء، بما في ذلك أحرف الإرجاع والأسطر الجديدة. تسمح هذه الميزات باستخدام حرف السطر الجديد أو تسلسل أحرف الإرجاع والسطر الجديد كفاصل.

يوضح هذا المثال كائنين من نوع JSON (لا يظهر حرف السطر الجديد الضمني في نهاية كل سطر):

{ "some" : "thing\n" } { "may" :{ "include" : "nested" , "objects" :[ "and" , "arrays" ]}}

إن استخدام سطر جديد كفاصل يُمكّن هذا التنسيق من العمل بشكل جيد للغاية مع أدوات يونكس التقليدية الموجهة نحو الأسطر .

على سبيل المثال، قد يبدو ملف السجل كما يلي:

{ "ts" : "2020-06-18T10:44:12" , "started" :{ "pid" : 45678 }}{ "ts" : "2020-06-18T10:44:13" , "logged_in" :{ "username" : "foo" }, "connection" :{ "addr" : "1.2.3.4" , "port" : 5678 }}{ "ts" : "2020-06-18T10:44:15" , "registered" :{ "username" : "bar" , "email" : "bar@example.com" }, "connection" :{ "addr" : "2.3.4.5" , "port" : 6789 }}{ "ts" : "2020-06-18T10:44:16" , "logged_out" :{ "username" : "foo" }, "connection" :{ "addr" : "1.2.3.4" , "port" : 5678 }}

وهو أمر سهل للغاية للفرز حسب التاريخ، والبحث عن أسماء المستخدمين، والإجراءات، وعناوين IP، وما إلى ذلك.

التوافق

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

غالبًا ما يتم استخدام مصطلحي "JSON المفصول بالأسطر" و "JSON المفصول بالأسطر الجديدة" دون توضيح ما إذا كانت الأسطر الجديدة المضمنة مدعومة أم لا.

في السابق، كانت مواصفات JSON المفصولة بأسطر جديدة [ 9 ] تسمح بتضمين التعليقات إذا كان أول حرفين في السطر هما "//". لم يكن بالإمكان استخدام هذه الميزة مع محللات JSON القياسية في حال تضمين التعليقات. أما الإصدار الحالي من المواصفات ("NDJSON - JSON المفصول بأسطر جديدة") [ 10 ] فلم يعد يتضمن التعليقات.

يمكن تحويل JSON المتسلسل إلى JSON مفصول بأسطر باستخدام أداة JSON مناسبة مثل jq . على سبيل المثال

jq --compact-output . < concatenated.json > lines.json 

JSON مفصول بفواصل السجلات

تتيح خاصية بث JSON المفصول بفواصل السجلات إمكانية فصل سلاسل نص JSON دون اشتراط استبعاد المسافات البيضاء من مُنسِّق JSON. ولأن سلاسل نص JSON لا يمكن أن تحتوي على أحرف تحكم، يُمكن استخدام فاصل السجلات لفصلها. إضافةً إلى ذلك، يُقترح أن يتبع كل سلسلة نص JSON حرف سطر جديد لضمان التعامل السليم مع كائنات JSON الرئيسية التي لا تُحدِّد نفسها بنفسها (الأرقام، والقيم true وfalse، والقيم null).

يُعرف هذا التنسيق أيضًا باسم JSON Text Sequences أو نوع MIMEapplication/json-seq ، وقد تم وصفه رسميًا في IETF RFC 7464 .

يوضح المثال أدناه كائنين من نوع JSON حيث يمثل ␞ حرف التحكم في فاصل السجلات ويمثل ␊ حرف تغذية السطر:

{ "some" : "thing\n" } { "may" : { "include" : "nested" , "objects" : [ "and" , "arrays" ] } } 

JSON المتسلسل

تتيح تقنية بث JSON المتسلسل للمرسل كتابة كل كائن JSON في البث مباشرةً دون فواصل. وتعتمد هذه التقنية على استخدام المُستقبِل لمحلل قادر على التعرف على كل كائن JSON وإخراجه عند تحليل الحرف الأخير. إن JSON المتسلسل ليس تنسيقًا جديدًا، بل هو مجرد اسم لبث عدة كائنات JSON دون أي فواصل.

تتميز هذه الصيغة بقدرتها على التعامل مع كائنات JSON المنسقة بأحرف سطر جديد مضمنة، أي المنسقة بشكل يسهل قراءتها. على سبيل المثال، هذان المدخلان صحيحان وينتجان نفس المخرج:

{ "some" : "thing\n" }{ "may" :{ "include" : "nested" , "objects" :[ "and" , "arrays" ]}}
{ "some" : "thing\n" } { "may" : { "include" : "nested" , "objects" : [ "and" , "arrays" ] } }

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

JSON ذو بادئة الطول

تتيح تقنية بث JSON المُؤطَّر أو المُسبق بطول معين للمرسل تحديد طول كل رسالة بشكل صريح. وتعتمد هذه التقنية على استخدام المُستقبِل لمحلل قادر على التعرف على كل طول ثم قراءة n بايت التالية لتحليلها كبيانات JSON.

تتميز هذه الصيغة بقدرتها على تسريع عملية التحليل نظرًا لتحديد طول كل رسالة بدقة، بدلًا من إجبار المحلل على البحث عن الفواصل. كما أن صيغة JSON ذات البادئة الطولية مناسبة تمامًا لتطبيقات TCP، حيث يمكن تقسيم الرسالة الواحدة إلى أجزاء متعددة، لأن الطول المحدد مسبقًا يُخبر المحلل بدقة عدد البايتات المتوقعة قبل محاولة تحليل سلسلة JSON.

يوضح هذا المثال كائنين من نوع JSON مسبوقين ببادئة الطول (حيث يمثل كل طول طول البايت لسلسلة JSON التالية):

18 { "بعض" : "شيء\n" } 55 { "قد" :{ "يتضمن" : "متداخل" , "كائنات" :[ "و" , "مصفوفات" ]}}

التطبيقات والأدوات

JSON مفصول بأسطر جديدة

JSON مفصول بفواصل السجلات

  • يستطيع برنامج jq إنشاء وقراءة نصوص JSON المفصولة بفواصل السجلات.
  • json-stream-es هي مكتبة JavaScript/TypeScript (واجهة أمامية وخلفية) يمكنها إنشاء وقراءة مستندات JSON المفصولة بفواصل السجلات.

JSON المتسلسل

  • وحدة concatjson لتحليل وتسلسل بيانات JSON المتدفقة المدمجة لـ Node.js
  • json-stream-es هي مكتبة JavaScript/TypeScript (واجهة أمامية وخلفية) يمكنها إنشاء وقراءة مستندات JSON المتسلسلة.
  • يمكن لـ Jackson (API) قراءة وكتابة محتوى JSON المتسلسل.
  • معالج JSON خفيف الوزن ومرن يعمل عبر سطر الأوامر jq
  • محلل بيانات JSON المتدفق من Noggit Solr للغة Java
  • Yajl – مكتبة JSON أخرى. YAJL عبارة عن محلل JSON صغير يعتمد على الأحداث (على نمط SAX) مكتوب بلغة ANSI C ، ومولد JSON صغير للتحقق من الصحة.
  • ArduinoJson هي مكتبة C++ تدعم JSON المتسلسل.
  • يمكن لـ GSON JsonStreamParser.java قراءة JSON المتسلسل.
  • json-stream هو محلل JSON متدفق للغة بايثون.

JSON ذو بادئة الطول

مراجع

  1. رايان، فيلم غرين. "كيف بنينا فيلم غرين، الجزء الثاني من جزئين" . filmgrainapp.com. مؤرشف من الأصل في 5 يوليو 2013. تم الاطلاع عليه في 4 يوليو 2013 .
  2. "أسطر JSON" .
  3. ويليامز، ن. (2015). "RFC 7464" . طلب ​​تعليقات . doi : 10.17487/RFC7464 .
  4. "ndjson - JSON مفصول بأسطر جديدة - تنسيق للبيانات المهيكلة" . ndjson.org . مؤرشف من الأصل بتاريخ 18-12-2023 . تم الاطلاع عليه بتاريخ 22-10-2025 .
  5. ndjson/ndjson-spec ، ndjson، 18-10-2025 ، تم الاسترجاع في 22-10-2025
  6. ndjson. "تحديث specification_draft2.md · ndjson/ndjson-spec@c658c26" . GitHub . تم الاسترجاع في 22-10-2025 .
  7. "أسطر JSON" . jsonlines.org . تم الاطلاع عليه بتاريخ 22-10-2025 .
  8. "JSON Lines |On The Web" . jsonlines.org . تم الاطلاع عليه بتاريخ 22-10-2025 .
  9. "JSON مفصول بأسطر جديدة" . جيمبو جيه دبليو . مؤرشف من الأصل بتاريخ 22-12-2015.
  10. "NDJSON - JSON مفصول بأسطر جديدة" . GitHub . 2 يونيو 2021.
  11. "التسجيل المركزي باستخدام Monolog و Logstash و Elasticsearch" .
  12. "الحزمة org.eclipse.rdf4j.rio.ndjsonld" . مؤسسة إكليبس . تم الاطلاع عليه في 1 مايو 2023 .
  13. "تقديم تطبيق RDFParser وRDFWriter لتنسيق JSON-LD المفصول بأسطر جديدة" . مستودع rdf4j على GitHub . فبراير 2021. تم الاطلاع عليه في 1 مايو 2023 .