Công cụ này làm gì
JSON Lines (còn gọi là JSONL hay NDJSON) lưu mỗi dòng một giá trị JSON. Đây là định dạng được ưa chuộng cho log, xuất dữ liệu, API streaming, nạp hàng loạt vào BigQuery và Elasticsearch, và các tập dữ liệu học máy như tệp fine-tuning của OpenAI, vì chương trình có thể đọc hoặc ghi thêm từng bản ghi mà không cần nạp cả tệp.
Tuy nhiên, nhiều công cụ chỉ nhận một mảng JSON duy nhất. Công cụ này chuyển JSON Lines thành mảng JSON đã định dạng, và chuyển mảng JSON ngược lại thành JSON Lines với mỗi dòng một bản ghi thu gọn.
Cách dùng
- Chọn Chiều chuyển: JSON Lines → JSON hoặc JSON → JSON Lines.
- Dán dữ liệu, tải lên tệp
.jsonl,.ndjsonhoặc.json, hoặc bấm Mẫu. - Khi xuất JSON, chọn thụt lề 2 hoặc 4 dấu cách, hoặc Thu gọn để xuất trên một dòng.
- Sao chép hoặc tải kết quả, hoặc dùng Dùng làm đầu vào để chuyển ngược lại.
Nếu một dòng không phải JSON hợp lệ, lỗi sẽ cho biết số dòng và cột để bạn đến thẳng bản ghi hỏng — rất tiện khi tệp log có một mục bị cắt cụt giữa hàng nghìn mục.
Ví dụ
Ba dòng JSON Lines sau:
{"id": 1, "event": "signup"}
{"id": 2, "event": "login"}
{"id": 3, "event": "logout"}
trở thành mảng JSON này:
[
{
"id": 1,
"event": "signup"
},
{
"id": 2,
"event": "login"
},
{
"id": 3,
"event": "logout"
}
]
Theo chiều ngược lại, mỗi phần tử của mảng được ghi trên một dòng, không có khoảng trắng, và tệp kết thúc bằng ký tự xuống dòng.
Khi nào dùng loại nào
Dùng JSON Lines khi bản ghi được tạo ra hoặc xử lý từng cái một: ghi thêm vào log, truyền kết quả dạng stream, chia tập dữ liệu lớn cho nhiều worker, hoặc xử lý bằng công cụ theo dòng như grep, head và wc -l. Dùng mảng JSON khi chương trình cần toàn bộ tập hợp cùng lúc, chẳng hạn tệp cấu hình, dữ liệu kiểm thử hay phần thân phản hồi của một endpoint REST.
Câu hỏi thường gặp
› JSONL, NDJSON và JSON Lines khác nhau thế nào?
Đó là các tên gọi của cùng một định dạng: mỗi dòng một giá trị JSON hoàn chỉnh, ngăn cách bằng ký tự xuống dòng. JSON Lines (.jsonl) và newline-delimited JSON (.ndjson) chỉ khác nhau ở tên và phần mở rộng tệp.
› Có được để dòng trống không?
Dòng trống và ký tự xuống dòng cuối tệp được bỏ qua khi đọc. Ký tự xuống dòng kiểu Windows (CRLF) và BOM UTF-8 cũng được xử lý.
› Tệp của tôi là JSON đã định dạng, một đối tượng trải trên nhiều dòng. Sao lại báo lỗi?
Trong JSON Lines, mỗi giá trị phải nằm trọn trên một dòng. Nếu dữ liệu là một mảng JSON bình thường, hãy đổi chiều chuyển sang JSON → JSON Lines; nếu là một chuỗi đối tượng đã định dạng, hãy đặt chúng vào một mảng trước.
› Chuyển đổi có làm thay đổi số hay thứ tự khóa không?
Không. Giá trị và thứ tự khóa được giữ nguyên; chỉ khoảng trắng thay đổi. Số nguyên rất lớn vượt quá phạm vi an toàn của JavaScript (khoảng 9 triệu tỷ) có thể mất độ chính xác, như mọi công cụ JSON chạy trên trình duyệt.