<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>JSON on Dev TLDRLSS</title>
        <link>https://dev.tldrlss.com/ar/tags/json/</link>
        <description>Recent content in JSON on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ar</language>
        <lastBuildDate>Sat, 01 Aug 2026 14:05:42 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/ar/tags/json/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>ما هي صيغة JSONL؟ وكيف تختلف JSONL عن JSON و CSV؟ ولماذا يُعد ضبط نماذج الذكاء الاصطناعي (Fine-Tuning) مستحيلاً بدون JSONL!</title>
        <link>https://dev.tldrlss.com/ar/article/2026/08/jsonl-vs-json-csv-guide/</link>
        <pubDate>Sat, 01 Aug 2026 14:05:42 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/ar/article/2026/08/jsonl-vs-json-csv-guide/</guid>
        <description>&lt;img src="https://dev.tldrlss.com/global-assets/images/data/jsonl-intro-cover-1.jpg" alt="Featured image of post ما هي صيغة JSONL؟ وكيف تختلف JSONL عن JSON و CSV؟ ولماذا يُعد ضبط نماذج الذكاء الاصطناعي (Fine-Tuning) مستحيلاً بدون JSONL!" /&gt;&lt;p&gt;جميعنا يعرف صيغتي &lt;code&gt;JSON&lt;/code&gt; و &lt;code&gt;CSV&lt;/code&gt; جيدًا، ولكن هل واجهت يومًا استهلاكًا مفرطًا للذاكرة أدى إلى انهيار البرنامج أثناء معالجة ملف &lt;code&gt;JSON&lt;/code&gt; ضخم بحجم عدة جيجابايت؟ أو وجدت أن الترميز الخاص (escaping) أثناء تسجيل البيانات المتداخلة متعددة المستويات في &lt;code&gt;CSV&lt;/code&gt; أمر في غاية الصعوبة؟&lt;/p&gt;
&lt;p&gt;في مجال تدريب الذكاء الاصطناعي الحديث ومعالجة البيانات الضخمة، هناك صيغة بيانات أصبحت بهدوء المعيار الرئيسي، وهي &lt;strong&gt;JSONL (JSON Lines)&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;القيمة الجوهرية لـ JSONL: حل المشكلتين الكبريين في JSON التقليدي (عدم القدرة على القراءة التدفقية) و CSV (عدم دعم الهياكل المتداخلة)!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;ما-هي-jsonl-افهم-التعريف-الأساسي-كائن-json-واحد-في-كل-سطر-في-دقيقة-واحدة&#34;&gt;ما هي JSONL؟ افهم التعريف الأساسي &amp;ldquo;كائن JSON واحد في كل سطر&amp;rdquo; في دقيقة واحدة
&lt;/h2&gt;&lt;p&gt;الاسم الكامل لـ &lt;code&gt;JSONL&lt;/code&gt; هو &lt;code&gt;JSON Lines&lt;/code&gt; (ويُطلق عليها أحيانًا &lt;code&gt;NDJSON&lt;/code&gt; اختصارًا لـ &lt;code&gt;Newline Delimited JSON&lt;/code&gt;). مفهومها الأساسي مباشر جدًا: &lt;strong&gt;كل سطر عبارة عن كائن JSON مستقل وكامل&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;في ملفات &lt;code&gt;JSON&lt;/code&gt; التقليدية، يحتوي المستوى الخارجي عادةً على أقواس مربعة ضخمة &lt;code&gt;[]&lt;/code&gt; تغلف جميع البيانات، ويجب الفصل بين الكائنات بفواصل &lt;code&gt;,&lt;/code&gt;. بينما تتخلى &lt;code&gt;JSONL&lt;/code&gt; تمامًا عن الأقواس المربعة والفواصل الخارجية، وتستخدم رمز السطر الجديد &lt;code&gt;\n&lt;/code&gt; للفصل بين كل سجل.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://dev.tldrlss.com/global/common/data/jsonl-vs-json-csv-1.jpg&#34;width=&#34;1024&#34;height=&#34;1024&#34;srcset=&#34;https://dev.tldrlss.com/global/common/data/jsonl-vs-json-csv-1_hu_64d704071b051a58.jpg 480w, https://dev.tldrlss.com/global/common/data/jsonl-vs-json-csv-1_hu_21dfe6d4bedc9b3b.jpg 1024w&#34;loading=&#34;lazy&#34;alt=&#34;مقارنة صيغ البيانات JSONL و JSON و CSV&#34;
	
	class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;100&#34;data-flex-basis=&#34;240px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;مقارنة-بين-3-صيغ-بيانات-شائعة&#34;&gt;مقارنة بين 3 صيغ بيانات شائعة
&lt;/h3&gt;&lt;p&gt;لتوضيح الفكرة بشكل أكثر إدراكًا، لنقارن بين &lt;code&gt;JSONL&lt;/code&gt; و &lt;code&gt;JSON&lt;/code&gt; و &lt;code&gt;CSV&lt;/code&gt; معًا:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;صيغة البيانات&lt;/th&gt;
          &lt;th&gt;هيكل التنسيق&lt;/th&gt;
          &lt;th&gt;دعم البيانات المتداخلة&lt;/th&gt;
          &lt;th&gt;القراءة/الكتابة التدفقية (Streaming)&lt;/th&gt;
          &lt;th&gt;السيناريو المناسب&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;تسلسل هرمي شجري فردي، يجب تحميله دفعة واحدة&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;دعم أصلي&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;صعب (يتطلب تحميل الملف بالكامل)&lt;/td&gt;
          &lt;td&gt;نقل &lt;code&gt;Web API&lt;/code&gt;، ملفات التكوين&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;جدول مستوٍ ثنائي الأبعاد، تفصل الأعمدة بفواصل&lt;/td&gt;
          &lt;td&gt;صعب (يتطلب ترميزًا خاصًا)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;دعم أصلي&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;تقارير Excel، البيانات المستوية&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;كائن JSON مستقل في كل سطر، يفصل بسطر جديد&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;دعم أصلي&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;ممتاز جدًا (قراءة وإضافة سطر بسطر)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;مجموعات بيانات تدريب الذكاء الاصطناعي، سجلات &lt;code&gt;Log&lt;/code&gt; الضخمة&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;لماذا-يفضل-تدريب-نماذج-الذكاء-الاصطناعي-و-etl-للبيانات-الضخمة-صيغة-jsonl&#34;&gt;لماذا يفضل تدريب نماذج الذكاء الاصطناعي و ETL للبيانات الضخمة صيغة JSONL؟
&lt;/h2&gt;&lt;p&gt;في السنوات الأخيرة، مع صعود نماذج اللغة الكبيرة (LLMs) مثل &lt;code&gt;OpenAI&lt;/code&gt; و &lt;code&gt;Anthropic&lt;/code&gt;، أصبحت &lt;code&gt;JSONL&lt;/code&gt; الخيار الأول للضبط الدقيق (Fine-tuning) وإعداد مجموعات البيانات. ويرجع ذلك إلى ميزتين رئيسيتين:&lt;/p&gt;
&lt;h3 id=&#34;1-استهلاك-منخفض-جدا-للذاكرة-يدعم-المعالجة-التدفقية-streaming&#34;&gt;1. استهلاك منخفض جدًا للذاكرة (يدعم المعالجة التدفقية Streaming)
&lt;/h3&gt;&lt;p&gt;عندما تصل قاعدة بيانات التدريب الخاصة بك إلى 50 جيجابايت، إذا كانت ملف &lt;code&gt;JSON&lt;/code&gt; تقليديًا، يجب على البرنامج قراءة ملف 50 جيجابايت بالكامل في الذاكرة لتحليل شجرة بناء الجملة، مما يتسبب فورًا في خطأ نفاد الذاكرة (OOM).&lt;/p&gt;
&lt;p&gt;في المقابل، تدعم &lt;code&gt;JSONL&lt;/code&gt; &lt;strong&gt;القراءة التدفقية سطرًا بسطر (Line-by-line Streaming)&lt;/strong&gt;. يحتاج البرنامج فقط إلى قراءة سطر واحد في كل مرة (قد يكون بضعة كيلوبايت فقط)، وتحرير الذاكرة بعد المعالجة، ثم قراءة السطر التالي.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    subgraph TraditionalJSON[&amp;#34;طريقة قراءة JSON التقليدية&amp;#34;]
        A1[&amp;#34;قراءة ملف JSON بحجم 50 جيجابايت&amp;#34;] --&amp;gt; A2[&amp;#34;تحليل شجرة القواعد للملف بالكامل&amp;#34;]
        A2 --&amp;gt; A3[&amp;#34;تحميل 50 جيجابايت في الذاكرة دفعة واحدة&amp;#34;]
        A3 --&amp;gt;|مخاطرة عالية| A4[&amp;#34;انهيار بسبب نفاد الذاكرة (OOM)&amp;#34;]
    end

    subgraph JSONLStreaming[&amp;#34;طريقة قراءة JSONL التدفقية&amp;#34;]
        B1[&amp;#34;فتح ملف JSONL بحجم 50 جيجابايت&amp;#34;] --&amp;gt; B2[&amp;#34;قراءة السطر 1 (5 كيلوبايت)&amp;#34;]
        B2 --&amp;gt; B3[&amp;#34;تحليل ومعالجة سجل واحد&amp;#34;]
        B3 --&amp;gt; B4[&amp;#34;تحرير الذاكرة وقراءة السطر التالي&amp;#34;]
        B4 --&amp;gt; B5[&amp;#34;إكمال معالجة البيانات الضخمة باستقرار وكفاءة&amp;#34;]
    end
&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;بالنسبة للبيانات الضخمة، تخفض JSONL استهلاك الذاكرة من O(N) إلى O(1)!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-دعم-الإضافة-بدون-قفل-append-only-logging&#34;&gt;2. دعم الإضافة بدون قفل (Append-Only Logging)
&lt;/h3&gt;&lt;p&gt;في الأنظمة الموزعة أو سيناريوهات تجميع السجلات، إذا كنت تريد إضافة بيانات في نهاية الملف:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JSON&lt;/code&gt; التقليدي: يجب قراءة الملف بالكامل، وإزالة القوس &lt;code&gt;]&lt;/code&gt; في النهاية، وإضافة فاصلة &lt;code&gt;,&lt;/code&gt;، وكتابة البيانات الجديدة ثم إعادة إغلاق القوس &lt;code&gt;]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSONL&lt;/strong&gt;: يمكنك ببساطة إلحاق (append) السلسلة النصية مباشرة مع رمز السطر الجديد &lt;code&gt;\n&lt;/code&gt; في نهاية الملف لإكمال الكتابة.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-المعالجة-المتوازية-للبيانات-الضخمة-parallel-processing&#34;&gt;3. المعالجة المتوازية للبيانات الضخمة (Parallel Processing)
&lt;/h3&gt;&lt;p&gt;نظرًا لأن كل سطر في &lt;code&gt;JSONL&lt;/code&gt; هو كائن JSON مستقل، يمكن تقسيم الملفات الكبيرة عند أي رمز سطر جديد إلى كتل أصغر وإرسالها إلى معالجات متعددة أو نود حسابية للمعالجة المتوازية دون أن تتداخل مع بعضها البعض.&lt;/p&gt;
&lt;h2 id=&#34;5-قواعد-تنظيمية-صارمة-في-jsonl-يجب-على-كل-مطور-معرفتها&#34;&gt;5 قواعد تنظيمية صارمة في JSONL يجب على كل مطور معرفتها
&lt;/h2&gt;&lt;p&gt;رغم أن &lt;code&gt;JSONL&lt;/code&gt; تتمتع بمرونة عالية، إلا أنه لضمان قدرة المحللات البرمجية على قراءتها بسلاسة، حددت المواصفات الرسمية (&lt;code&gt;jsonlines.org&lt;/code&gt;) 5 قيود تنظيمية صارمة:&lt;/p&gt;
&lt;h3 id=&#34;شرح-تفصيلي-للمواصفات&#34;&gt;شرح تفصيلي للمواصفات
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;رقم القاعدة&lt;/th&gt;
          &lt;th&gt;البند الصارم&lt;/th&gt;
          &lt;th&gt;الشرح والتطبيق الصحيح&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;القاعدة 1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;يجب أن يكون كل سطر JSON صالحة&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;يجب أن يكون كل سطر يتم استخراجه بشكل مستقل قابلًا للتحليل بواسطة &lt;code&gt;JSON.parse()&lt;/code&gt; القياسي.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;القاعدة 2&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;يحظر وجود سطور جديدة غير مسبوقة برمز هروب&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;إذا نصت السلسلة على سطر جديد، يجب تحويلها إلى &lt;code&gt;\n&lt;/code&gt;؛ &lt;strong&gt;ويحظر التنسيق متعدد السطور&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;القاعدة 3&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;يحظر استخدام الأقواس الخارجية&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;يمنع تمامًا استخدام الأقواس المربعة الخارجية &lt;code&gt;[]&lt;/code&gt;، &lt;strong&gt;ولا يجوز وضع فواصل&lt;/strong&gt; &lt;code&gt;,&lt;/code&gt; بين السطور.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;القاعدة 4&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;ترميز UTF-8 بدون BOM&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;يجب استخدام ترميز &lt;code&gt;UTF-8&lt;/code&gt; بصرامة و&lt;strong&gt;لا يجوز أن يحتوي على رأس BOM&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;القاعدة 5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;لا تحتوي على أسطر فارغة افتراضيًا&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;يجب أن يحتوي كل سطر على بيانات صالحة؛ ويُسمح فقط للسطر الأخير في الملف بسطر فارغ نهائي.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;التحليل-العلمي-كيف-تكتب-كود-قراءة-jsonl-عالي-الدفاعية&#34;&gt;التحليل العلمي: كيف تكتب كود قراءة JSONL عالي الدفاعية؟
&lt;/h2&gt;&lt;p&gt;في التطوير المحلي، نظرًا لأن &lt;code&gt;JSONL&lt;/code&gt; تفتقر إلى هيكل ثابت (&lt;strong&gt;Schema-less&lt;/strong&gt;)، قد تختلف المفاتيح (&lt;code&gt;Keys&lt;/code&gt;) تمامًا في السطور المختلفة. عند كتابة كود التحليل، يُوصى باتباع المبادئ الدفاعية التالية:&lt;/p&gt;
&lt;h3 id=&#34;مثال-لكود-دفاعي-python&#34;&gt;مثال لكود دفاعي (Python)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;process_jsonl_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encoding&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line_num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;enumerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;# 1. تخطي السطور الفارغة تلقائيًا (لمنع فشل التحليل)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loads&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;# 2. استخراج القيم بدفاعية: استخدام .get() لتجنب KeyError&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;user_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Unknown&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;# 3. تحديد نوع الحقل (معالجة البيانات متعددة الأشكال)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;doc_type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Line &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line_num&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc_type&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; - &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JSONDecodeError&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Error parsing line &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line_num&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# تنفيذ القراءة&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;process_jsonl_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dataset.jsonl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;نصيحة دفاعية رئيسية: استخدام &lt;code&gt;strip()&lt;/code&gt; لإزالة المسافات في البداية والنهاية، واستخدام &lt;code&gt;.get()&lt;/code&gt; بدلاً من الوصول المباشر للمفاتيح يمنع أكثر من 90% من انهيارات وقت التشغيل!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;دليل-اختيار-السيناريو-بين-jsonl-و-json-و-csv&#34;&gt;دليل اختيار السيناريو بين JSONL و JSON و CSV
&lt;/h2&gt;&lt;p&gt;بعد التعرف على الميزات القوية لـ &lt;code&gt;JSONL&lt;/code&gt;، هل يجب تحويل جميع البيانات إلى &lt;code&gt;JSONL&lt;/code&gt;؟ الإجابة هي: يعتمد ذلك على سيناريو الاستخدام!&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;متطلبات السيناريو&lt;/th&gt;
          &lt;th&gt;الصيغة الموصى بها&lt;/th&gt;
          &lt;th&gt;سبب الاختيار&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;نقل API بين واجهة المستخدم والخلفية&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;دعم المتصفح الأصلي عالي، وحجم البيانات في النقل الموحد مناسب.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;تصدير البيانات لغير التقنيين / التسويق&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;يمكن فتحها وعرضها مباشرة باستخدام &lt;code&gt;Excel&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;الضبط الدقيق لنماذج الذكاء الاصطناعي (Fine-tuning)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;الصيغة الرسمية المحددة لتدريب واجهات برمجة تطبيقات &lt;code&gt;OpenAI&lt;/code&gt; / &lt;code&gt;Anthropic&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;تسجيل السجلات الضخمة للنظام&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;تكلفة كتابة منخفضة، وتدعم الإضافة غير المحدودة ومراقبة ذاكرة منخفضة للغاية.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;خطوط أنابيب البيانات الضخمة ETL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;مريحة للتقسيم الموزع والمعالجة المتوازية.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;طالما أنك تتقن خصائص كل صيغة وتختار الأداة المناسبة للسيناريو الصحيح، ستتحسن كفاءة معالجة البيانات لديك بشكل كبير!&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://jsonlines.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JSON Lines Official Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://jsonlines.org/examples/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JSON Lines Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
