<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>JSONL on Dev TLDRLSS</title>
        <link>https://dev.tldrlss.com/fr/tags/jsonl/</link>
        <description>Recent content in JSONL on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>fr</language>
        <lastBuildDate>Sat, 01 Aug 2026 14:05:42 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/fr/tags/jsonl/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Qu&#39;est-ce que le Format JSONL ? En quoi JSONL Diffère-t-il de JSON et CSV ? Pourquoi le Fine-Tuning de Modèles d&#39;IA Exige Absolument JSONL !</title>
        <link>https://dev.tldrlss.com/fr/article/2026/08/jsonl-vs-json-csv-guide/</link>
        <pubDate>Sat, 01 Aug 2026 14:05:42 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/fr/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 Qu&#39;est-ce que le Format JSONL ? En quoi JSONL Diffère-t-il de JSON et CSV ? Pourquoi le Fine-Tuning de Modèles d&#39;IA Exige Absolument JSONL !" /&gt;&lt;p&gt;Nous sommes tous très familiers avec &lt;code&gt;JSON&lt;/code&gt; et &lt;code&gt;CSV&lt;/code&gt;, mais avez-vous déjà vu votre mémoire exploser jusqu&amp;rsquo;au crash lors du traitement d&amp;rsquo;un fichier &lt;code&gt;JSON&lt;/code&gt; volumineux de plusieurs Go ? Ou trouvé l&amp;rsquo;échappement de caractères extrêmement pénible lors de l&amp;rsquo;enregistrement de données imbriquées à plusieurs niveaux en &lt;code&gt;CSV&lt;/code&gt; ?&lt;/p&gt;
&lt;p&gt;Dans le domaine de l&amp;rsquo;entraînement de l&amp;rsquo;IA moderne et du traitement de données massives, un format de données est en train de devenir silencieusement la norme incontournable : &lt;strong&gt;JSONL (JSON Lines)&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;La valeur fondamentale de JSONL : Résoudre les deux problèmes majeurs du JSON traditionnel (impossibilité de lecture en streaming) et du CSV (absence de prise en charge des structures imbriquées) !&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;quest-ce-que-jsonl--comprendre-la-définition-clé-de-un-json-par-ligne-en-une-minute&#34;&gt;Qu&amp;rsquo;est-ce que JSONL ? Comprendre la Définition Clé de &amp;ldquo;Un JSON par Ligne&amp;rdquo; en Une Minute
&lt;/h2&gt;&lt;p&gt;Le nom complet de &lt;code&gt;JSONL&lt;/code&gt; est &lt;code&gt;JSON Lines&lt;/code&gt; (parfois aussi appelé &lt;code&gt;NDJSON&lt;/code&gt;, pour &lt;code&gt;Newline Delimited JSON&lt;/code&gt;). Son concept fondamental est très simple : &lt;strong&gt;chaque ligne est un objet JSON indépendant et complet&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dans les fichiers &lt;code&gt;JSON&lt;/code&gt; traditionnels, le niveau le plus externe comporte généralement de grands crochets &lt;code&gt;[]&lt;/code&gt; enveloppant toutes les données, et les objets doivent être séparés par des virgules &lt;code&gt;,&lt;/code&gt;. En revanche, &lt;code&gt;JSONL&lt;/code&gt; élimine complètement les crochets et virgules externes, utilisant le caractère de saut de ligne &lt;code&gt;\n&lt;/code&gt; pour séparer chaque enregistrement.&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;Comparaison des Formats de Données JSONL, JSON et 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;comparaison-de-3-formats-de-données-courants&#34;&gt;Comparaison de 3 Formats de Données Courants
&lt;/h3&gt;&lt;p&gt;Pour rendre cela plus intuitif, comparons &lt;code&gt;JSONL&lt;/code&gt;, &lt;code&gt;JSON&lt;/code&gt; et &lt;code&gt;CSV&lt;/code&gt; ensemble :&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Format de Données&lt;/th&gt;
          &lt;th&gt;Structure de Disposition&lt;/th&gt;
          &lt;th&gt;Support des Données Imbriquées&lt;/th&gt;
          &lt;th&gt;Lecture/Écriture en Streaming&lt;/th&gt;
          &lt;th&gt;Scénario Idéal&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;Hiérarchie d&amp;rsquo;arbre unique, doit être chargé d&amp;rsquo;un coup&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Support Natif&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Difficile (nécessite de charger tout le fichier)&lt;/td&gt;
          &lt;td&gt;Transfert d&amp;rsquo;API &lt;code&gt;Web API&lt;/code&gt;, fichiers de configuration&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;Tableau plat 2D, colonnes séparées par des virgules&lt;/td&gt;
          &lt;td&gt;Difficile (nécessite échappement ou encodage)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Support Natif&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Rapports Excel, données plates&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;Un JSON indépendant par ligne, séparé par saut de ligne&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Support Natif&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Excellent (lecture &amp;amp; ajout ligne par ligne)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Jeux de données d&amp;rsquo;entraînement IA, logs &lt;code&gt;Log&lt;/code&gt; massifs&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;pourquoi-lentraînement-de-modèles-dia-et-le-big-data-etl-préfèrent-ils-jsonl-&#34;&gt;Pourquoi l&amp;rsquo;Entraînement de Modèles d&amp;rsquo;IA et le Big Data ETL Préfèrent-ils JSONL ?
&lt;/h2&gt;&lt;p&gt;Ces dernières années, avec l&amp;rsquo;essor des Grands Modèles de Langage (LLM) comme &lt;code&gt;OpenAI&lt;/code&gt; et &lt;code&gt;Anthropic&lt;/code&gt;, &lt;code&gt;JSONL&lt;/code&gt; s&amp;rsquo;est imposé comme le format privilégié pour le Fine-tuning et la préparation des jeux de données. Deux avantages clés expliquent cela :&lt;/p&gt;
&lt;h3 id=&#34;1-consommation-de-mémoire-extrêmement-faible-supporte-le-traitement-en-streaming&#34;&gt;1. Consommation de Mémoire Extrêmement Faible (Supporte le Traitement en Streaming)
&lt;/h3&gt;&lt;p&gt;Lorsque votre base de données d&amp;rsquo;entraînement atteint 50 Go, s&amp;rsquo;il s&amp;rsquo;agissait d&amp;rsquo;un fichier &lt;code&gt;JSON&lt;/code&gt; traditionnel, le programme devrait lire la totalité des 50 Go en mémoire pour analyser l&amp;rsquo;arbre syntaxique, ce qui provoquerait immédiatement une erreur de mémoire saturée (OOM).&lt;/p&gt;
&lt;p&gt;En revanche, &lt;code&gt;JSONL&lt;/code&gt; prend en charge la &lt;strong&gt;Lecture en Streaming Ligne par Ligne (Line-by-line Streaming)&lt;/strong&gt;. Le programme n&amp;rsquo;a besoin de lire qu&amp;rsquo;une seule ligne à la fois (souvent quelques Ko seulement), de libérer la mémoire après traitement, puis de lire la ligne suivante.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    subgraph TraditionalJSON[&amp;#34;Méthode de Lecture JSON Traditionnelle&amp;#34;]
        A1[&amp;#34;Lire fichier JSON de 50 Go&amp;#34;] --&amp;gt; A2[&amp;#34;Analyser l&amp;#39;arbre syntaxique complet&amp;#34;]
        A2 --&amp;gt; A3[&amp;#34;Charger 50 Go en mémoire d&amp;#39;un coup&amp;#34;]
        A3 --&amp;gt;|Haut Risque| A4[&amp;#34;Crash par Débordement de Mémoire (OOM)&amp;#34;]
    end

    subgraph JSONLStreaming[&amp;#34;Méthode de Lecture en Streaming JSONL&amp;#34;]
        B1[&amp;#34;Ouvrir fichier JSONL de 50 Go&amp;#34;] --&amp;gt; B2[&amp;#34;Lire ligne 1 (5 Ko)&amp;#34;]
        B2 --&amp;gt; B3[&amp;#34;Analyser et traiter le registre unique&amp;#34;]
        B3 --&amp;gt; B4[&amp;#34;Libérer la mémoire et lire la ligne suivante&amp;#34;]
        B4 --&amp;gt; B5[&amp;#34;Terminer le traitement de données massives avec stabilité et efficacité&amp;#34;]
    end
&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pour les données massives, JSONL réduit la consommation de mémoire de O(N) à O(1) !&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-prise-en-charge-de-lajout-sans-verrouillage-append-only-logging&#34;&gt;2. Prise en Charge de l&amp;rsquo;Ajout Sans Verrouillage (Append-Only Logging)
&lt;/h3&gt;&lt;p&gt;Dans les systèmes distribués ou les scénarios de collecte de logs, si vous souhaitez ajouter des données à la fin d&amp;rsquo;un fichier :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JSON&lt;/code&gt; traditionnel : Doit lire tout le fichier, supprimer le &lt;code&gt;]&lt;/code&gt; final, ajouter une virgule &lt;code&gt;,&lt;/code&gt;, écrire les nouvelles données puis réinsérer &lt;code&gt;]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSONL&lt;/strong&gt; : Il suffit d&amp;rsquo;ajouter (append) directement la chaîne avec un saut de ligne &lt;code&gt;\n&lt;/code&gt; à la fin du fichier pour terminer l&amp;rsquo;écriture.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-traitement-parallèle-des-big-data-parallel-processing&#34;&gt;3. Traitement Parallèle des Big Data (Parallel Processing)
&lt;/h3&gt;&lt;p&gt;Comme chaque ligne de &lt;code&gt;JSONL&lt;/code&gt; est un objet JSON indépendant, les grands fichiers peuvent être découpés à n&amp;rsquo;importe quel saut de ligne en blocs plus petits et envoyés à plusieurs cœurs CPU ou nœuds de calcul pour un traitement parallèle sans interférence mutuelle.&lt;/p&gt;
&lt;h2 id=&#34;5-règles-de-formatage-strictes-sur-jsonl-que-tout-développeur-doit-connaître&#34;&gt;5 Règles de Formatage Strictes sur JSONL Que Tout Développeur Doit Connaître
&lt;/h2&gt;&lt;p&gt;Bien que &lt;code&gt;JSONL&lt;/code&gt; soit extrêmement flexible, pour garantir que les analyseurs puissent le lire sans problème, la spécification officielle (&lt;code&gt;jsonlines.org&lt;/code&gt;) établit 5 restrictions de format strictes :&lt;/p&gt;
&lt;h3 id=&#34;description-détaillée-de-la-spécification&#34;&gt;Description Détaillée de la Spécification
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;N° de Règle&lt;/th&gt;
          &lt;th&gt;Règle Stricte&lt;/th&gt;
          &lt;th&gt;Description &amp;amp; Démonstration Correcte&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Règle 1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Chaque ligne doit être un JSON valide&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Chaque ligne extraite indépendamment doit être analysable par un &lt;code&gt;JSON.parse()&lt;/code&gt; standard.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Règle 2&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Interdiction des sauts de ligne non échappés&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Si une chaîne contient des sauts de ligne, ils doivent être échappés sous forme de &lt;code&gt;\n&lt;/code&gt;. &lt;strong&gt;Format multiligne interdit&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Règle 3&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Interdiction des crochets extérieurs&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Il est strictement interdit d&amp;rsquo;utiliser des crochets extérieurs &lt;code&gt;[]&lt;/code&gt;, et &lt;strong&gt;aucune virgule&lt;/strong&gt; &lt;code&gt;,&lt;/code&gt; ne doit séparer les lignes.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Règle 4&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Encodage UTF-8 sans BOM&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;L&amp;rsquo;encodage &lt;code&gt;UTF-8&lt;/code&gt; doit être strictement utilisé et &lt;strong&gt;ne doit pas contenir d&amp;rsquo;en-tête BOM&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Règle 5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Aucune ligne vide par défaut&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Chaque ligne doit contenir des données valides ; seule la toute dernière ligne du fichier autorise un saut de ligne vide final.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;analyse-pratique--comment-écrire-un-code-de-lecture-jsonl-hautement-défensif-&#34;&gt;Analyse Pratique : Comment Écrire un Code de Lecture JSONL Hautement Défensif ?
&lt;/h2&gt;&lt;p&gt;En développement réel, comme &lt;code&gt;JSONL&lt;/code&gt; ne possède pas de schéma fixe (&lt;strong&gt;Schema-less&lt;/strong&gt;), les clés (&lt;code&gt;Keys&lt;/code&gt;) sur différentes lignes peuvent être totalement différentes. Lors de l&amp;rsquo;écriture du code d&amp;rsquo;analyse, il est recommandé de suivre ces principes défensifs :&lt;/p&gt;
&lt;h3 id=&#34;exemple-de-code-défensif-python&#34;&gt;Exemple de Code Défensif (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. Ignorer automatiquement les lignes vides (éviter les échecs d&amp;#39;analyse)&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. Récupération défensive de valeur : utiliser .get() pour éviter 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. Identification du type de champ (traitement de données polymorphes)&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;# Exécuter la lecture&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;Conseil défensif clé : Utiliser &lt;code&gt;strip()&lt;/code&gt; pour nettoyer les espaces au début et à la fin, et utiliser &lt;code&gt;.get()&lt;/code&gt; au lieu d&amp;rsquo;un accès direct aux clés permettra d&amp;rsquo;éviter plus de 90 % des plantages à l&amp;rsquo;exécution !&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;guide-de-sélection-de-scénarios-pour-jsonl-json-et-csv&#34;&gt;Guide de Sélection de Scénarios pour JSONL, JSON et CSV
&lt;/h2&gt;&lt;p&gt;Après avoir découvert les fonctionnalités puissantes de &lt;code&gt;JSONL&lt;/code&gt;, devrions-nous convertir toutes nos données en &lt;code&gt;JSONL&lt;/code&gt; ? La réponse est : cela dépend du scénario d&amp;rsquo;utilisation !&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Besoin du Scénario&lt;/th&gt;
          &lt;th&gt;Format Recommandé&lt;/th&gt;
          &lt;th&gt;Explication du Motif&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Transfert d&amp;rsquo;API Frontend/Backend Web&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Fort support natif des navigateurs, taille de transfert modérée.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Exportation de données pour non-techniciens / marketing&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Peut être ouvert et consulté directement avec &lt;code&gt;Excel&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Fine-tuning de modèles d&amp;rsquo;IA&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Format d&amp;rsquo;entraînement officiel spécifié par les API &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;Enregistrement de Logs massifs du système&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Faible coût d&amp;rsquo;écriture, support d&amp;rsquo;ajout illimité et suivi de mémoire très faible.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Pipelines ETL Big Data&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Pratique pour le découpage distribué et le traitement parallèle.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Tant que vous maîtrisez les caractéristiques de chaque format et choisissez le bon outil pour le bon scénario, les performances de votre traitement de données s&amp;rsquo;amélioreront considérablement !&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>
