<?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/pt/tags/jsonl/</link>
        <description>Recent content in JSONL on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>pt</language>
        <lastBuildDate>Sat, 01 Aug 2026 14:05:42 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/pt/tags/jsonl/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>O que é o Formato JSONL? Como o JSONL se Diferencia do JSON e do CSV? Por que o Fine-Tuning de Modelos de IA Exige JSONL!</title>
        <link>https://dev.tldrlss.com/pt/article/2026/08/jsonl-vs-json-csv-guide/</link>
        <pubDate>Sat, 01 Aug 2026 14:05:42 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/pt/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 O que é o Formato JSONL? Como o JSONL se Diferencia do JSON e do CSV? Por que o Fine-Tuning de Modelos de IA Exige JSONL!" /&gt;&lt;p&gt;Todos estamos familiarizados com &lt;code&gt;JSON&lt;/code&gt; e &lt;code&gt;CSV&lt;/code&gt;, mas você já enfrentou uma situação em que sua memória esgotou até travar ao processar um arquivo &lt;code&gt;JSON&lt;/code&gt; gigante de vários GB? Ou achou extremamente penoso escapar caracteres ao registrar dados aninhados de vários níveis em &lt;code&gt;CSV&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;No campo do treinamento de IA moderna e do processamento massivo de dados, existe um formato de dados que está silenciosamente se tornando o padrão principal: &lt;strong&gt;JSONL (JSON Lines)&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;O valor fundamental do JSONL: Resolver os dois grandes problemas do JSON tradicional (incapacidade de leitura em streaming) e do CSV (falta de suporte a estruturas aninhadas)!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;o-que-é-jsonl-entenda-a-definição-chave-de-um-json-por-linha-em-um-minuto&#34;&gt;O que é JSONL? Entenda a Definição Chave de &amp;ldquo;Um JSON por Linha&amp;rdquo; em Um Minuto
&lt;/h2&gt;&lt;p&gt;O nome completo do &lt;code&gt;JSONL&lt;/code&gt; é &lt;code&gt;JSON Lines&lt;/code&gt; (às vezes também chamado de &lt;code&gt;NDJSON&lt;/code&gt;, ou &lt;code&gt;Newline Delimited JSON&lt;/code&gt;). Seu conceito fundamental é muito direto: &lt;strong&gt;cada linha é um objeto JSON independente e completo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nos arquivos &lt;code&gt;JSON&lt;/code&gt; tradicionais, o nível mais externo geralmente possui colchetes gigantes &lt;code&gt;[]&lt;/code&gt; envolvendo todos os dados, e os objetos devem ser separados por vírgulas &lt;code&gt;,&lt;/code&gt;. Em contraste, o &lt;code&gt;JSONL&lt;/code&gt; elimina completamente os colchetes e vírgulas externos, usando o caractere de quebra de linha &lt;code&gt;\n&lt;/code&gt; para separar cada registro.&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;Comparação dos Formatos de Dados JSONL, JSON e 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;comparação-de-3-formatos-de-dados-comuns&#34;&gt;Comparação de 3 Formatos de Dados Comuns
&lt;/h3&gt;&lt;p&gt;Para tornar mais intuitivo, vamos comparar &lt;code&gt;JSONL&lt;/code&gt;, &lt;code&gt;JSON&lt;/code&gt; e &lt;code&gt;CSV&lt;/code&gt; juntos:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Formato de Dados&lt;/th&gt;
          &lt;th&gt;Estrutura de Layout&lt;/th&gt;
          &lt;th&gt;Suporte a Dados Aninhados&lt;/th&gt;
          &lt;th&gt;Leitura/Escrita em Streaming&lt;/th&gt;
          &lt;th&gt;Cenário Ideal&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;Hierarquia de árvore única, deve carregar tudo de uma vez&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Suporte Nativo&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Difícil (requer carregar o arquivo inteiro)&lt;/td&gt;
          &lt;td&gt;Transferência de &lt;code&gt;Web API&lt;/code&gt;, arquivos de configuração&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;Tabela plana 2D, colunas separadas por vírgulas&lt;/td&gt;
          &lt;td&gt;Difícil (requer escape ou codificação)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Suporte Nativo&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Relatórios do Excel, dados planos&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;Um JSON independente por linha, separado por quebra de linha&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Suporte Nativo&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Excelente (leitura &amp;amp; anexo linha por linha)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Datasets de treinamento de IA, registros de &lt;code&gt;Log&lt;/code&gt; massivos&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;por-que-o-treinamento-de-modelos-de-ia-e-etl-de-big-data-preferem-o-jsonl&#34;&gt;Por que o Treinamento de Modelos de IA e ETL de Big Data Preferem o JSONL?
&lt;/h2&gt;&lt;p&gt;Nos últimos anos, com o avanço dos Grandes Modelos de Linguagem (LLMs), como os da &lt;code&gt;OpenAI&lt;/code&gt; e da &lt;code&gt;Anthropic&lt;/code&gt;, o &lt;code&gt;JSONL&lt;/code&gt; se tornou o formato preferido para Fine-tuning e preparação de datasets. Existem duas vantagens principais por trás disso:&lt;/p&gt;
&lt;h3 id=&#34;1-consumo-de-memória-extremamente-baixo-suporta-processamento-em-streaming&#34;&gt;1. Consumo de Memória Extremamente Baixo (Suporta Processamento em Streaming)
&lt;/h3&gt;&lt;p&gt;Quando seu banco de dados de treinamento atinge 50 GB, se for um arquivo &lt;code&gt;JSON&lt;/code&gt; tradicional, o programa precisará ler todos os 50 GB na memória para analisar a árvore sintática, o que causará instantaneamente um erro de memória esgotada (OOM).&lt;/p&gt;
&lt;p&gt;Por outro lado, o &lt;code&gt;JSONL&lt;/code&gt; suporta &lt;strong&gt;Leitura em Streaming Linha por Linha (Line-by-line Streaming)&lt;/strong&gt;. O programa só precisa ler uma linha por vez (geralmente apenas alguns KB), liberar a memória após o processamento e, em seguida, ler a próxima linha.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    subgraph TraditionalJSON[&amp;#34;Método de Leitura JSON Tradicional&amp;#34;]
        A1[&amp;#34;Ler arquivo JSON de 50 GB&amp;#34;] --&amp;gt; A2[&amp;#34;Analisar árvore sintática completa&amp;#34;]
        A2 --&amp;gt; A3[&amp;#34;Carregar 50 GB na memória de uma vez&amp;#34;]
        A3 --&amp;gt;|Alto Risco| A4[&amp;#34;Colapso por Memória Esgotada (OOM)&amp;#34;]
    end

    subgraph JSONLStreaming[&amp;#34;Método de Leitura em Streaming JSONL&amp;#34;]
        B1[&amp;#34;Abrir arquivo JSONL de 50 GB&amp;#34;] --&amp;gt; B2[&amp;#34;Ler linha 1 (5 KB)&amp;#34;]
        B2 --&amp;gt; B3[&amp;#34;Analisar e processar registro único&amp;#34;]
        B3 --&amp;gt; B4[&amp;#34;Liberar memória e ler próxima linha&amp;#34;]
        B4 --&amp;gt; B5[&amp;#34;Concluir processamento de dados massivos com estabilidade e eficiência&amp;#34;]
    end
&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Para dados massivos, o JSONL reduz o consumo de memória de O(N) para O(1)!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-suporta-anexo-sem-bloqueios-append-only-logging&#34;&gt;2. Suporta Anexo Sem Bloqueios (Append-Only Logging)
&lt;/h3&gt;&lt;p&gt;Em sistemas distribuídos ou cenários de coleta de logs, se você deseja adicionar dados ao final de um arquivo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JSON&lt;/code&gt; tradicional: Deve ler todo o arquivo, remover o &lt;code&gt;]&lt;/code&gt; final, adicionar uma vírgula &lt;code&gt;,&lt;/code&gt;, escrever os novos dados e recolocar o &lt;code&gt;]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSONL&lt;/strong&gt;: Basta anexar (append) diretamente a string com a quebra de linha &lt;code&gt;\n&lt;/code&gt; ao final do arquivo para concluir a escrita.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-processamento-paralelo-de-big-data-parallel-processing&#34;&gt;3. Processamento Paralelo de Big Data (Parallel Processing)
&lt;/h3&gt;&lt;p&gt;Como cada linha no &lt;code&gt;JSONL&lt;/code&gt; é um objeto JSON independente, arquivos grandes podem ser divididos em qualquer quebra de linha em blocos menores e enviados para múltiplos núcleos de CPU ou nós de computação para processamento paralelo sem interferir uns nos outros.&lt;/p&gt;
&lt;h2 id=&#34;5-regras-estritas-de-formato-jsonl-que-todo-desenvolvedor-deve-conhecer&#34;&gt;5 Regras Estritas de Formato JSONL que Todo Desenvolvedor Deve Conhecer
&lt;/h2&gt;&lt;p&gt;Embora o &lt;code&gt;JSONL&lt;/code&gt; seja extremamente flexível, para garantir que os analisadores possam lê-lo perfeitamente, a especificação oficial (&lt;code&gt;jsonlines.org&lt;/code&gt;) estabelece 5 restrições rígidas de formato:&lt;/p&gt;
&lt;h3 id=&#34;descrição-detalhada-da-especificação&#34;&gt;Descrição Detalhada da Especificação
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Nº da Regra&lt;/th&gt;
          &lt;th&gt;Item da Regra Estrita&lt;/th&gt;
          &lt;th&gt;Descrição e Demonstração Correta&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Regra 1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Cada linha deve ser um JSON válido&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Cada linha extraída de forma independente deve ser analisável pelo &lt;code&gt;JSON.parse()&lt;/code&gt; padrão.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Regra 2&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Proibidas quebras de linha sem escape&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Se uma string contiver quebras de linha, elas devem ser escapadas como &lt;code&gt;\n&lt;/code&gt;. &lt;strong&gt;Proibido o formato multilinha&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Regra 3&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Proibidos símbolos de colchetes externos&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;É estritamente proibido usar colchetes externos &lt;code&gt;[]&lt;/code&gt;, e &lt;strong&gt;não se deve adicionar vírgulas&lt;/strong&gt; &lt;code&gt;,&lt;/code&gt; entre as linhas.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Regra 4&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Codificação UTF-8 sem BOM&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Deve-se usar estritamente a codificação &lt;code&gt;UTF-8&lt;/code&gt; e &lt;strong&gt;não deve conter cabeçalho BOM&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Regra 5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Sem linhas em branco por padrão&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Cada linha deve conter dados válidos; apenas a última linha do arquivo permite uma quebra de linha final em branco.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;análise-prática-como-escrever-um-código-de-leitura-jsonl-de-alta-defesa&#34;&gt;Análise Prática: Como Escrever um Código de Leitura JSONL de Alta Defesa?
&lt;/h2&gt;&lt;p&gt;No desenvolvimento real, como o &lt;code&gt;JSONL&lt;/code&gt; não possui um esquema fixo (&lt;strong&gt;Schema-less&lt;/strong&gt;), as chaves (&lt;code&gt;Keys&lt;/code&gt;) entre diferentes linhas podem ser completamente distintas. Ao escrever o código de análise, recomenda-se seguir estes princípios defensivos:&lt;/p&gt;
&lt;h3 id=&#34;exemplo-de-código-defensivo-python&#34;&gt;Exemplo de Código Defensivo (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. Ignorar linhas em branco automaticamente (evitar falhas de análise)&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. Obtenção defensiva de valores: usar .get() para evitar 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. Identificação do tipo de campo (processamento de dados polimórficos)&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;# Executar leitura&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;Dica defensiva principal: Usar &lt;code&gt;strip()&lt;/code&gt; para limpar espaços iniciais e finais, e usar &lt;code&gt;.get()&lt;/code&gt; em vez de acesso direto às chaves evita mais de 90% das falhas em tempo de execução!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;guia-de-seleção-de-cenários-para-jsonl-json-e-csv&#34;&gt;Guia de Seleção de Cenários para JSONL, JSON e CSV
&lt;/h2&gt;&lt;p&gt;Após conhecer os recursos poderosos do &lt;code&gt;JSONL&lt;/code&gt;, deveríamos converter todos os dados para &lt;code&gt;JSONL&lt;/code&gt;? A resposta é: depende do cenário de uso!&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Necessidade do Cenário&lt;/th&gt;
          &lt;th&gt;Formato Recomendado&lt;/th&gt;
          &lt;th&gt;Explicação do Motivo&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Transferência de 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;Alto suporte nativo nos navegadores, tamanho de transferência moderado.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Exportar dados para pessoal não técnico / marketing&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Pode ser aberto e visualizado diretamente com o &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 modelos de IA&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Formato de treinamento oficial especificado pelas APIs da &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;Registro massivo de Logs do sistema&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Baixo custo de escrita, suporte a anexo ilimitado e monitoramento de memória ultra baixo.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Pipelines ETL de Big Data&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Conveniente para divisão distribuída e processamento paralelo.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Desde que você domine as características de cada formato e escolha a ferramenta certa para o cenário correto, o desempenho do seu processamento de dados aumentará significativamente!&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>
