Vì sao cần biến bảng tính thành JSON
CSV là thứ mà bảng tính, CRM, ngân hàng và bảng điều khiển phân tích xuất ra. JSON là thứ mà API web, mã JavaScript, cơ sở dữ liệu NoSQL và phần lớn hệ thống cấu hình tiêu thụ. Việc chuyển đổi này xuất hiện liên tục: nạp dữ liệu cho cơ sở dữ liệu thử nghiệm từ một bảng tính đồng nghiệp đang quản lý, biến danh sách sản phẩm thành dữ liệu mẫu cho một bản prototype front-end, đưa danh sách chuyển hướng hoặc bản dịch vào script build, hoặc gửi một loạt bản ghi đến API chỉ nhận JSON.
Đầu ra ở đây là một mảng JSON với mỗi hàng dữ liệu là một object. Hàng tiêu đề cung cấp tên thuộc tính, nên một bảng tính có các cột sku, title và price sẽ trở thành các object có đúng ba khóa đó, sẵn sàng để duyệt vòng lặp.
Bộ phân tích đọc CSV của bạn như thế nào
CSV trông đơn giản cho đến khi một giá trị chứa ký tự phân tách. Bộ phân tích tuân theo quy tắc của RFC 4180, thứ gần nhất với một tiêu chuẩn mà CSV có:
- Một trường bọc trong dấu nháy kép có thể chứa ký tự phân tách, xuống dòng và dấu nháy.
"Smith, John"vẫn là một giá trị. - Dấu nháy bên trong trường có nháy được viết hai lần:
"6"" pipe"trở thành6" pipe. - Dòng có thể kết thúc bằng CRLF kiểu Windows hoặc LF kiểu Unix; cả hai đều được xử lý.
- Ký tự BOM ở đầu tệp, mà Excel thêm vào khi lưu dạng CSV UTF-8, được loại bỏ để không bị dính vào tên cột đầu tiên.
- Các dòng hoàn toàn trống bị bỏ qua.
Ký tự phân tách được chọn bằng cách đếm dấu phẩy, chấm phẩy, tab và pipe ở dòng đầu tiên rồi chọn ký tự xuất hiện nhiều nhất. Cách này đúng với gần như mọi tệp xuất, nhưng nó dựa vào việc dòng tiêu đề mang tính đại diện. Nếu tiêu đề chỉ có một cột không có ký tự phân tách, dấu phẩy được mặc định.
Dấu cách quanh tên tiêu đề được cắt bỏ, nên price trở thành khóa price. Giá trị trong các hàng dữ liệu được giữ đúng như đã viết, kể cả dấu cách ở đầu hoặc cuối.
Giá trị có kiểu và chuỗi
Khi bật "Nhận diện số và boolean", mỗi ô được kiểm tra theo một danh sách quy tắc ngắn:
- Số nguyên và số thập phân thuần như
42,-7và19.99trở thành số JSON, miễn là có tối đa 15 chữ số. - Chính xác
truevàfalse, viết thường, trở thành boolean.TRUE,Yeshay1giữ nguyên. - Ô trống trở thành
null. - Mọi thứ khác, bao gồm chuỗi chữ số dài hơn,
1.5e3,+5,.5,1,234và ngày tháng, vẫn là chuỗi.
Điều này tiện lợi cho phần lớn dữ liệu, nhưng số trong JSON không mang định dạng, nên một số giá trị đổi nghĩa khi được gán kiểu:
- Số 0 ở đầu biến mất. Mã ZIP của Mỹ
02134trở thành2134, và mã hàng007trở thành7. - Chuỗi chữ số dài sẽ mất độ chính xác. Số trong JavaScript chỉ chính xác đến khoảng 15 chữ số có nghĩa, nên các giá trị nhiều chữ số hơn, như mã đơn hàng 20 chữ số hay số thẻ, được giữ ở dạng chuỗi thay vì bị làm tròn.
- Số điện thoại không có dấu cộng hay dấu cách cũng trở thành số.
Nếu có cột nào chứa mã định danh thay vì số lượng, hãy tắt tùy chọn và tự chuyển những trường thật sự là số trong mã của bạn. Khi tắt tùy chọn, ô trống trở thành chuỗi rỗng thay vì null.
Khi kết quả trông không đúng
- Mọi thứ dồn vào một khóa. Ký tự phân tách không được nhận diện, thường do tiêu đề dùng ký tự phân tách khác với dữ liệu, hoặc không có ký tự phân tách nào. Hãy kiểm tra dòng đầu tiên.
- Giá trị bị lệch một cột. Một trường chứa ký tự phân tách nhưng không được đặt trong dấu nháy. Hãy xuất lại từ ứng dụng nguồn thay vì sửa tay; bảng tính tự động đặt các trường như vậy trong dấu nháy.
- Cột thừa biến mất. Khóa chỉ lấy từ tiêu đề, nên các ô nằm sau cột tiêu đề cuối cùng bị bỏ. Hàng có ít ô hơn nhận
nullhoặc chuỗi rỗng cho các ô thiếu. - Hai cột, một khóa. Nếu tiêu đề lặp lại một tên, cột sau ghi đè cột trước trong mọi object. Hãy đổi tên một trong hai trước.
- Ký tự lạ như é. Tệp được lưu bằng bảng mã cũ. Hãy lưu lại dưới dạng CSV UTF-8 và dán lại một lần nữa.
Làm việc với kết quả
JSON được in với thụt lề 2 dấu cách, phù hợp để đọc và commit vào repository. Để rút gọn cho một request API hoặc thụt lề lại, hãy đưa nó qua định dạng JSON. Để đi theo chiều ngược lại sau khi chỉnh sửa, chuyển JSON sang CSV dựng lại bảng tính từ mảng. Việc chuyển đổi chạy hoàn toàn trong trang, điều quan trọng khi tệp xuất chứa tên khách hàng, email hoặc lương.