تخطي إلى المحتوى

لا يمكن تحويل هذا النوع من الملفات في المتصفح.

┐─ تحليل الملف ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
المطور : غير محدد (معيار مجتمعي)
الفئة : بيانات
نوع MIME : application/x-ndjson
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

ما هو ملف NDJSON؟

NDJSON (Newline Delimited JSON — JSON محدد بالسطر الجديد) يُعرف أيضاً بـ JSON Lines (.jsonl) أو LDJSON. الفكرة بسيطة: بدل تغليف كل البيانات في مصفوفة JSON كبيرة، يحتوي كل سطر على كائن JSON مستقل وصالح. الفاصل بين السجلات هو مجرد سطر جديد (\n).

هذه البنية البسيطة تحل مشكلة حقيقية في معالجة البيانات الضخمة: ملف JSON كبير يجب تحميله كاملاً في الذاكرة قبل تحليله (Parsing)، بينما NDJSON يمكن قراءته سطراً بسطر — مما يتيح معالجة ملفات بحجم أكبر من الذاكرة المتاحة. هذا ما جعله الصيغة المفضلة في البث (Streaming) وسجلات التطبيقات وخطوط أنابيب البيانات.

كيفية فتح ملفات NDJSON

  • أي محرر نصوص — كل سطر قابل للقراءة كـ JSON مستقل
  • jq (سطر أوامر، لينكس/ماك/ويندوز) — أداة JSON الأشهر لمعالجة NDJSON
  • Pythonfor line in open('file.ndjson'): json.loads(line) بكفاءة عالية
  • DuckDBSELECT * FROM 'file.ndjson' مباشرة بدون استيراد
  • Kibana (ELK Stack) — قراءة سجلات NDJSON من Elasticsearch
  • VS Code مع إضافة JSON Formatter — عرض ملفات NDJSON بتنسيق

المواصفات التقنية

الخاصيةالقيمة
نوع MIMEapplication/x-ndjson أو application/jsonl
صيغة كل سطرقيمة JSON صالحة (عادةً كائن {})
الفاصلسطر جديد \n أو \r\n
الترميزUTF-8 مطلوب
يُعرف أيضاً بـJSON Lines (.jsonl)، LDJSON، Streaming JSON
الأسطر الفارغةمسموح بها وتُتجاهل

الاستخدامات الشائعة

  • سجلات التطبيقات (Application Logs): مجموعة ELK Stack (Elasticsearch + Logstash + Kibana) تعتمد NDJSON كصيغة سجلات منظمة
  • بث البيانات (Streaming): Apache Kafka وAWS Kinesis يُوزّعان رسائل JSON بهذا الشكل عبر خطوط الأنابيب
  • فهرسة Elasticsearch بالجملة: واجهة Bulk API تتطلب NDJSON حصراً (سطر عملية + سطر بيانات)
  • تصدير قواعد البيانات: MongoDB وFirebase تُصدّران المجموعات بصيغة NDJSON للنسخ الاحتياطي والترحيل
  • ML/AI Dataset: مجموعات بيانات التدريب الكبيرة (Common Crawl، OpenAI datasets) بـ NDJSON

أمثلة بيانات NDJSON

{"id": 1, "name": "أحمد", "role": "admin", "active": true}
{"id": 2, "name": "سارة", "role": "editor", "active": true}
{"id": 3, "name": "خالد", "role": "viewer", "active": false}

معالجة NDJSON بـ jq و Python

# عرض كل سجل بصيغة منسقة
jq . users.ndjson

# استخراج حقل واحد فقط
jq '.name' users.ndjson

# فلترة بشرط
jq 'select(.active == true)' users.ndjson

# تحويل NDJSON إلى مصفوفة JSON عادية
jq -s '.' users.ndjson > users_array.json

# تحويل CSV إلى NDJSON باستخدام jq
jq -Rn '[inputs | split(",") | {id: .[0], name: .[1]}][]' data.csv
import json

# قراءة NDJSON سطراً بسطر (كفاءة عالية)
with open('data.ndjson', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if line:  # تجاهل الأسطر الفارغة
            record = json.loads(line)
            print(record['name'])

# كتابة NDJSON
records = [
    {"id": 1, "event": "login", "user": "ahmed"},
    {"id": 2, "event": "logout", "user": "sara"},
]
with open('events.ndjson', 'w', encoding='utf-8') as f:
    for record in records:
        f.write(json.dumps(record, ensure_ascii=False) + '\n')

NDJSON مقابل JSON مقابل CSV

الميزةNDJSONJSONCSV
معالجة سطر بسطر
بيانات متداخلة
قابلية القراءةجيدة
حجم الملفمتوسطمتوسط✅ أصغر
البث (Streaming)✅ مثالي