<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Cấu Trúc Dữ Liệu on Dev TLDRLSS</title>
        <link>https://dev.tldrlss.com/vi/categories/c%E1%BA%A5u-tr%C3%BAc-d%E1%BB%AF-li%E1%BB%87u/</link>
        <description>Recent content in Cấu Trúc Dữ Liệu on Dev TLDRLSS</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>vi</language>
        <lastBuildDate>Sat, 01 Aug 2026 14:05:42 +0800</lastBuildDate><atom:link href="https://dev.tldrlss.com/vi/categories/c%E1%BA%A5u-tr%C3%BAc-d%E1%BB%AF-li%E1%BB%87u/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Định Dạng JSONL Là Gì? JSONL Khác Gì Với JSON Và CSV? Tại Sao Fine-Tuning Mô Hình AI Bắt Buộc Phải Dùng JSONL!</title>
        <link>https://dev.tldrlss.com/vi/article/2026/08/jsonl-vs-json-csv-guide/</link>
        <pubDate>Sat, 01 Aug 2026 14:05:42 +0800</pubDate>
        
        <guid>https://dev.tldrlss.com/vi/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 Định Dạng JSONL Là Gì? JSONL Khác Gì Với JSON Và CSV? Tại Sao Fine-Tuning Mô Hình AI Bắt Buộc Phải Dùng JSONL!" /&gt;&lt;p&gt;Tất cả chúng ta đều rất quen thuộc với &lt;code&gt;JSON&lt;/code&gt; và &lt;code&gt;CSV&lt;/code&gt;, nhưng bạn đã bao giờ gặp trường hợp bộ nhớ bị quá tải khi xử lý tập tin &lt;code&gt;JSON&lt;/code&gt; dung lượng vài GB? Hoặc cảm thấy việc ký tự thoát (escape) vô cùng phiền phức khi ghi dữ liệu lồng nhau nhiều tầng bằng &lt;code&gt;CSV&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;Trong lĩnh vực huấn luyện AI hiện đại và xử lý dữ liệu khổng lồ, có một định dạng dữ liệu đang thầm lặng trở thành chuẩn mực phổ biến, đó chính là &lt;strong&gt;JSONL (JSON Lines)&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Giá trị cốt lõi của JSONL: Giải quyết hai điểm đau lớn của JSON truyền thống (không hỗ trợ đọc luồng) và CSV (không hỗ trợ cấu trúc lồng nhau)!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;jsonl-là-gì-hiểu-rõ-định-nghĩa-mỗi-dòng-một-json-trong-một-phút&#34;&gt;JSONL Là Gì? Hiểu Rõ Định Nghĩa &amp;ldquo;Mỗi Dòng Một JSON&amp;rdquo; Trong Một Phút
&lt;/h2&gt;&lt;p&gt;Tên đầy đủ của &lt;code&gt;JSONL&lt;/code&gt; là &lt;code&gt;JSON Lines&lt;/code&gt; (đôi khi còn được gọi là &lt;code&gt;NDJSON&lt;/code&gt;, tức &lt;code&gt;Newline Delimited JSON&lt;/code&gt;). Khái niệm cốt lõi của nó vô cùng thẳng thắn: &lt;strong&gt;mỗi dòng là một đối tượng JSON độc lập và hoàn chỉnh&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Trong tập tin &lt;code&gt;JSON&lt;/code&gt; truyền thống, lớp ngoài cùng thường có một dấu ngoặc vuông lớn &lt;code&gt;[]&lt;/code&gt; bao bọc toàn bộ dữ liệu, và các đối tượng phải cách nhau bằng dấu phẩy &lt;code&gt;,&lt;/code&gt;. Trong khi đó, &lt;code&gt;JSONL&lt;/code&gt; loại bỏ hoàn toàn dấu ngoặc vuông lớp ngoài cùng và dấu phẩy, thay bằng ký tự xuống dòng &lt;code&gt;\n&lt;/code&gt; để phân tách từng bản ghi.&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;So sánh định dạng dữ liệu JSONL, JSON và 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;so-sánh-3-định-dạng-dữ-liệu-phổ-biến&#34;&gt;So Sánh 3 Định Dạng Dữ Liệu Phổ Biến
&lt;/h3&gt;&lt;p&gt;Để giúp bạn hiểu rõ hơn, chúng ta hãy đặt &lt;code&gt;JSONL&lt;/code&gt;, &lt;code&gt;JSON&lt;/code&gt; và &lt;code&gt;CSV&lt;/code&gt; lên bàn cân để so sánh:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Định dạng dữ liệu&lt;/th&gt;
          &lt;th&gt;Cấu trúc bố cục&lt;/th&gt;
          &lt;th&gt;Hỗ trợ dữ liệu lồng nhau&lt;/th&gt;
          &lt;th&gt;Đọc ghi dạng luồng (Streaming)&lt;/th&gt;
          &lt;th&gt;Kịch bản phù hợp&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;Cấu trúc cây đơn phân cấp, cần tải toàn bộ một lúc&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Hỗ trợ nguyên bản&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Khó khăn (cần tải toàn bộ tập tin)&lt;/td&gt;
          &lt;td&gt;Truyền tải &lt;code&gt;Web API&lt;/code&gt;, tập tin cấu hình&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;Bảng phẳng 2D, phân tách cột bằng dấu phẩy&lt;/td&gt;
          &lt;td&gt;Khó khăn (cần mã hóa hoặc dùng ký tự thoát)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Hỗ trợ nguyên bản&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Báo cáo Excel, dữ liệu phẳng&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;Mỗi dòng một JSON độc lập, phân tách bằng xuống dòng&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Hỗ trợ nguyên bản&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Cực tốt (đọc và ghi tiếp từng dòng)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Tập dữ liệu huấn luyện AI, ghi &lt;code&gt;Log&lt;/code&gt; khổng lồ&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;tại-sao-huấn-luyện-mô-hình-ai-và-big-data-etl-lại-ưa-chuộng-jsonl&#34;&gt;Tại Sao Huấn Luyện Mô Hình AI Và Big Data ETL Lại Ưa Chuộng JSONL?
&lt;/h2&gt;&lt;p&gt;Những năm gần đây, cùng với sự trỗi dậy của các Mô hình Ngôn ngữ Lớn (LLM) như &lt;code&gt;OpenAI&lt;/code&gt;, &lt;code&gt;Anthropic&lt;/code&gt;, &lt;code&gt;JSONL&lt;/code&gt; đã vươn lên thành lựa chọn hàng đầu cho tinh chỉnh (Fine-tuning) và chuẩn bị tập dữ liệu. Đằng sau điều này là hai ưu điểm then chốt:&lt;/p&gt;
&lt;h3 id=&#34;1-mức-tiêu-thụ-bộ-nhớ-cực-thấp-hỗ-trợ-xử-lý-luồng-streaming&#34;&gt;1. Mức Tiêu Thụ Bộ Nhớ Cực Thấp (Hỗ Trợ Xử Lý Luồng Streaming)
&lt;/h3&gt;&lt;p&gt;Khi cơ sở dữ liệu huấn luyện của bạn lên đến 50 GB, nếu là tập tin &lt;code&gt;JSON&lt;/code&gt; truyền thống, chương trình buộc phải đọc toàn bộ 50 GB vào bộ nhớ để phân tích cây cú pháp, điều này sẽ ngay lập tức gây ra lỗi tràn bộ nhớ (OOM).&lt;/p&gt;
&lt;p&gt;Ngược lại, &lt;code&gt;JSONL&lt;/code&gt; hỗ trợ &lt;strong&gt;Đọc theo từng dòng (Line-by-line Streaming)&lt;/strong&gt;. Chương trình chỉ cần đọc một dòng tại một thời điểm (có thể chỉ vài KB), giải phóng bộ nhớ sau khi xử lý xong rồi mới đọc dòng tiếp theo.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    subgraph TraditionalJSON[&amp;#34;Phương thức đọc JSON truyền thống&amp;#34;]
        A1[&amp;#34;Đọc tập tin JSON 50 GB&amp;#34;] --&amp;gt; A2[&amp;#34;Phân tích cây cú pháp toàn bộ tập tin&amp;#34;]
        A2 --&amp;gt; A3[&amp;#34;Tải 50 GB vào bộ nhớ cùng lúc&amp;#34;]
        A3 --&amp;gt;|Rủi ro cao| A4[&amp;#34;Tràn bộ nhớ gây sụp đổ (OOM)&amp;#34;]
    end

    subgraph JSONLStreaming[&amp;#34;Phương thức đọc luồng JSONL&amp;#34;]
        B1[&amp;#34;Mở tập tin JSONL 50 GB&amp;#34;] --&amp;gt; B2[&amp;#34;Đọc dòng 1 (5 KB)&amp;#34;]
        B2 --&amp;gt; B3[&amp;#34;Phân tích và xử lý bản ghi đơn&amp;#34;]
        B3 --&amp;gt; B4[&amp;#34;Giải phóng bộ nhớ và đọc dòng tiếp theo&amp;#34;]
        B4 --&amp;gt; B5[&amp;#34;Hoàn thành xử lý dữ liệu lớn ổn định và hiệu quả&amp;#34;]
    end
&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Đối với dữ liệu khổng lồ, JSONL giảm mức tiêu thụ bộ nhớ từ O(N) xuống còn O(1)!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-hỗ-trợ-ghi-tiếp-không-khóa-append-only-logging&#34;&gt;2. Hỗ Trợ Ghi Tiếp Không Khóa (Append-Only Logging)
&lt;/h3&gt;&lt;p&gt;Trong các hệ thống phân tán hoặc kịch bản thu thập nhật ký log, nếu muốn thêm dữ liệu vào cuối tập tin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JSON&lt;/code&gt; truyền thống: Phải đọc toàn bộ tập tin, xóa dấu &lt;code&gt;]&lt;/code&gt; ở cuối, thêm dấu phẩy &lt;code&gt;,&lt;/code&gt;, ghi dữ liệu mới rồi thêm lại dấu &lt;code&gt;]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSONL&lt;/strong&gt;: Chỉ cần ghi tiếp (append) trực tiếp chuỗi ký tự cùng ký tự xuống dòng &lt;code&gt;\n&lt;/code&gt; vào cuối tập tin là hoàn tất.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-xử-lý-song-song-dữ-liệu-lớn-parallel-processing&#34;&gt;3. Xử Lý Song Song Dữ Liệu Lớn (Parallel Processing)
&lt;/h3&gt;&lt;p&gt;Vì mỗi dòng trong &lt;code&gt;JSONL&lt;/code&gt; là một đối tượng JSON độc lập, tập tin lớn có thể được chia nhỏ tại bất kỳ ký tự xuống dòng nào thành nhiều khối nhỏ, gửi đến nhiều CPU Core hoặc nút tính toán để xử lý song song mà không can thiệp lẫn nhau.&lt;/p&gt;
&lt;h2 id=&#34;5-quy-tắc-định-dạng-nghiêm-ngặt-về-jsonl-mà-lập-trình-viên-phải-biết&#34;&gt;5 Quy Tắc Định Dạng Nghiêm Ngặt Về JSONL Mà Lập Trình Viên Phải Biết
&lt;/h2&gt;&lt;p&gt;Mặc dù &lt;code&gt;JSONL&lt;/code&gt; cực kỳ linh hoạt, nhưng để đảm bảo trình phân tích có thể đọc mượt mà, quy chuẩn chính thức (&lt;code&gt;jsonlines.org&lt;/code&gt;) đã đưa ra 5 giới hạn định dạng nghiêm ngặt:&lt;/p&gt;
&lt;h3 id=&#34;giải-thích-chi-tiết-quy-chuẩn&#34;&gt;Giải Thích Chi Tiết Quy Chuẩn
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Số quy tắc&lt;/th&gt;
          &lt;th&gt;Mục quy tắc nghiêm ngặt&lt;/th&gt;
          &lt;th&gt;Giải thích và ví dụ đúng&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Quy tắc 1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Mỗi dòng phải là JSON hợp lệ&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Mỗi dòng khi lấy ra độc lập đều phải phân tích được bằng &lt;code&gt;JSON.parse()&lt;/code&gt; chuẩn.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Quy tắc 2&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Tuyệt đối không có xuống dòng chưa escape&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Nếu trong chuỗi chứa ký tự xuống dòng, phải thoát bằng &lt;code&gt;\n&lt;/code&gt;, &lt;strong&gt;cấm trình bày nhiều dòng&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Quy tắc 3&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Cấm dùng ký hiệu ngoặc ngoài cùng&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Tuyệt đối không có dấu ngoặc vuông &lt;code&gt;[]&lt;/code&gt; lớp ngoài cùng, giữa các dòng &lt;strong&gt;không được thêm dấu phẩy&lt;/strong&gt; &lt;code&gt;,&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Quy tắc 4&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Mã hóa UTF-8 không có BOM&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Nghiêm ngặt sử dụng mã hóa &lt;code&gt;UTF-8&lt;/code&gt; và &lt;strong&gt;không được chứa BOM header&lt;/strong&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Quy tắc 5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Mặc định không chứa dòng trống&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Mỗi dòng đều phải là dữ liệu hợp lệ, chỉ dòng cuối cùng của tập tin mới cho phép xuống dòng trống.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;!--adsense--&gt;
&lt;h2 id=&#34;phân-tích-thực-chiến-viết-mã-đọc-jsonl-phòng-thủ-cao-như-thế-nào&#34;&gt;Phân Tích Thực Chiến: Viết Mã Đọc JSONL Phòng Thủ Cao Như Thế Nào?
&lt;/h2&gt;&lt;p&gt;Trong thực tế phát triển, do &lt;code&gt;JSONL&lt;/code&gt; có đặc tính &lt;strong&gt;Không có Schema cố định (Schema-less)&lt;/strong&gt;, &lt;code&gt;Key&lt;/code&gt; ở các dòng khác nhau có thể hoàn toàn khác nhau. Khi viết mã phân tích, bạn nên tuân thủ các nguyên tắc phòng thủ sau:&lt;/p&gt;
&lt;h3 id=&#34;ví-dụ-mã-phòng-thủ-python&#34;&gt;Ví Dụ Mã Phòng Thủ (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. Tự động bỏ qua dòng trống (tránh lỗi phân tích do dòng trống)&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. Truy xuất giá trị phòng thủ: dùng .get() để tránh 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. Nhận diện kiểu trường dữ liệu (xử lý dữ liệu đa hình)&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;# Thực thi đọc&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;Mẹo phòng thủ then chốt: Sử dụng &lt;code&gt;strip()&lt;/code&gt; để xóa khoảng trắng đầu cuối, và dùng &lt;code&gt;.get()&lt;/code&gt; thay vì truy cập trực tiếp key sẽ giúp tránh hơn 90% sự cố sụp đổ khi chạy!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;hướng-dẫn-lựa-chọn-kịch-bản-cho-jsonl-json-và-csv&#34;&gt;Hướng Dẫn Lựa Chọn Kịch Bản Cho JSONL, JSON Và CSV
&lt;/h2&gt;&lt;p&gt;Sau khi tìm hiểu các tính năng mạnh mẽ của &lt;code&gt;JSONL&lt;/code&gt;, liệu chúng ta có nên chuyển toàn bộ dữ liệu sang &lt;code&gt;JSONL&lt;/code&gt; không? Câu trả lời là: Tùy thuộc vào kịch bản sử dụng!&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Nhu cầu kịch bản&lt;/th&gt;
          &lt;th&gt;Định dạng đề xuất&lt;/th&gt;
          &lt;th&gt;Giải thích lý do&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Truyền tải 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;Trình duyệt hỗ trợ nguyên bản cao, dung lượng dữ liệu mỗi lần truyền vừa phải.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Xuất dữ liệu cho nhân viên phi kỹ thuật/marketing&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Có thể mở và xem trực tiếp bằng &lt;code&gt;Excel&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Tinh chỉnh mô hình AI (Fine-tuning)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Định dạng huấn luyện chính thức được chỉ định bởi 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;Ghi Log khổng lồ của hệ thống&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Chi phí ghi thấp, hỗ trợ ghi tiếp vô hạn và theo dõi bộ nhớ cực thấp.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Đường ống ETL dữ liệu lớn&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;JSONL&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Thuận tiện cho việc cắt chia phân tán và xử lý song song.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Chỉ cần nắm vững đặc tính của từng định dạng và chọn đúng công cụ trong đúng kịch bản, hiệu suất xử lý dữ liệu của bạn sẽ được nâng cao đáng kể!&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>
