<?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/ru/tags/jsonl/</link>
        <description>Recent content in JSONL on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ru</language>
        <lastBuildDate>Sat, 01 Aug 2026 14:05:42 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/ru/tags/jsonl/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Что такое формат JSONL? Чем JSONL отличается от JSON и CSV? Почему точная настройка (Fine-Tuning) AI-моделей требует именно JSONL!</title>
        <link>https://dev.tldrlss.com/ru/article/2026/08/jsonl-vs-json-csv-guide/</link>
        <pubDate>Sat, 01 Aug 2026 14:05:42 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/ru/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) AI-моделей требует именно 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; размером в несколько ГБ? Или находить экранирование символов крайне мучительным при записи многоуровневых вложенных данных в &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-на-строку-за-1-минуту&#34;&gt;Что такое JSONL? Поймите ключевое определение &amp;ldquo;Один JSON на строку&amp;rdquo; за 1 минуту
&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;2D плоская таблица, столбцы разделены запятыми&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;В последние годы, с ростом популярных больших языковых моделей (LLM), таких как &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 Web Frontend/Backend&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;Официальный формат обучения, заданный 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;Массивная запись Log-файлов системы&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>
