Chuyển JSON sang CSV, CSV sang JSON và JSON sang câu lệnh INSERT
Công cụ đổi qua lại giữa ba dạng dữ liệu hay phải chuyển nhất trong công việc hằng ngày: mảng JSON sang bảng CSV, bảng CSV sang mảng JSON, và mảng JSON sang danh sách câu lệnh chèn dữ liệu SQL với tên bảng bạn tự đặt. Toàn bộ chạy trong trình duyệt và trang này nói rõ từng quy tắc chuyển đổi cùng chỗ dễ sai.
Tính năng nổi bật
- Chuyển mảng JSON thành bảng CSV, lấy dòng tiêu đề từ các khóa của phần tử đầu tiên
- Tự bọc trong dấu nháy kép và nhân đôi dấu nháy khi giá trị chuỗi có chứa dấu phẩy hoặc dấu nháy
- Chuyển bảng CSV thành mảng JSON có thụt lề hai khoảng trắng, dòng đầu làm tên trường
- Chuyển mảng JSON thành danh sách câu lệnh chèn dữ liệu, mỗi bản ghi một câu lệnh
- Ô đặt tên bảng riêng cho chế độ sinh câu lệnh SQL
- Giữ nguyên kiểu số, chuyển giá trị rỗng thành từ khóa NULL, nhân đôi dấu nháy đơn trong chuỗi
- Nhận cả đối tượng đơn lẻ chứ không bắt buộc phải là mảng, khi đó kết quả có đúng một dòng
- Báo lỗi cú pháp ngay khi chuỗi JSON không hợp lệ, kèm thông báo của bộ phân tích
Vì sao ba định dạng này cứ phải đổi qua lại suốt
Ba định dạng này thuộc ba thế giới khác nhau và ba thế giới đó buộc phải nói chuyện với nhau hằng ngày. JSON là thứ giao diện lập trình trả về và là thứ lập trình viên làm việc cùng. CSV là thứ bộ phận kinh doanh, kế toán và marketing dùng vì họ mở bằng bảng tính. Câu lệnh chèn dữ liệu là thứ cơ sở dữ liệu hiểu. Một tình huống rất quen thuộc: bạn gọi một giao diện lập trình lấy về danh sách đơn hàng dạng JSON, sếp muốn xem trong bảng tính, và cuối tuần bạn lại cần đẩy chính dữ liệu đó vào một bảng để đối chiếu. Làm tay thì phải mở trình soạn thảo, viết vài dòng mã, chạy, sửa lỗi. Với vài chục bản ghi thì việc đó không đáng, và đó chính là khoảng trống mà công cụ này lấp: dán vào, đổi, chép ra, xong trong một phút.
Lợi ích khi sử dụng
- Đổi định dạng trong một phút thay vì viết một đoạn mã dùng một lần
- Không phải cài công cụ dòng lệnh hay mở môi trường lập trình chỉ để đổi vài chục bản ghi
- Sinh sẵn câu lệnh chèn dữ liệu với tên bảng tùy chọn, tiết kiệm việc gõ tay lặp lại
- Báo lỗi cú pháp JSON ngay, tiện dùng như một bước kiểm tra nhanh
- Dữ liệu không rời khỏi trình duyệt nên dùng được với dữ liệu nội bộ
Cách chuyển đổi một tập dữ liệu
- 1Chọn chiều chuyển đổi trong danh sách, và nếu chọn sinh câu lệnh SQL thì điền thêm tên bảng đích.
- 2Dán dữ liệu nguồn vào ô bên trái, với JSON thì nên là một mảng các đối tượng có cùng bộ khóa.
- 3Bấm nút chuyển đổi, nếu chuỗi JSON sai cú pháp thì thông báo lỗi sẽ hiện ngay bên dưới.
- 4Đọc kết quả và kiểm tra hai thứ: số dòng có khớp số bản ghi nguồn không, và có ô nào hiện ra chuỗi lạ không.
- 5Sao chép kết quả, riêng câu lệnh SQL thì chạy thử trên môi trường kiểm thử trước khi chạy trên dữ liệu thật.
Quy tắc chính xác của từng chiều chuyển đổi
Chiều JSON sang CSV lấy danh sách cột từ các khóa của phần tử đầu tiên trong mảng, rồi với mỗi phần tử sau chỉ đọc đúng những khóa đó. Nghĩa là nếu bản ghi thứ mười có thêm một trường mà bản ghi đầu không có, trường đó sẽ biến mất khỏi kết quả, và nếu một bản ghi thiếu trường nào thì ô tương ứng để trống. Giá trị chuỗi chỉ được bọc trong dấu nháy kép khi bên trong có dấu phẩy hoặc dấu nháy kép; giá trị số và giá trị lôgic được ghi trần. Chiều CSV sang JSON coi dòng đầu tiên là tên trường, cắt các dòng còn lại theo dấu phẩy rồi ghép theo thứ tự cột, mọi giá trị đều thành chuỗi trong kết quả nên số cũng nằm trong dấu nháy. Chiều JSON sang câu lệnh SQL lấy tên cột từ khóa của phần tử đầu tiên, sinh một câu lệnh chèn riêng cho từng bản ghi, giữ nguyên số không bọc nháy, chuyển giá trị rỗng thành từ khóa NULL, và với chuỗi thì bọc nháy đơn đồng thời nhân đôi mọi dấu nháy đơn có sẵn bên trong.
CSV không đơn giản như cái tên của nó
Nhiều người nghĩ CSV chỉ là chữ ngăn nhau bằng dấu phẩy, nhưng quy ước phổ biến nhất cho định dạng này đặt ra vài luật mà bỏ qua là hỏng dữ liệu. Luật thứ nhất, một ô chứa dấu phẩy phải được bọc trong dấu nháy kép. Luật thứ hai, một ô chứa dấu nháy kép phải bọc nháy và nhân đôi dấu nháy bên trong. Luật thứ ba, một ô được phép chứa cả ký tự xuống dòng miễn là nó nằm trong cặp nháy. Chiều JSON sang CSV ở đây xử lý đúng hai luật đầu nhưng không xử lý luật thứ ba, nên nếu dữ liệu của bạn có trường ghi chú nhiều dòng thì tệp kết quả sẽ vỡ khi mở bằng bảng tính. Chiều ngược lại còn thô hơn: nó cắt mỗi dòng bằng dấu phẩy mà không hiểu cặp nháy, nên một ô như địa chỉ có chứa dấu phẩy sẽ bị tách thành hai cột và toàn bộ các cột phía sau lệch đi. Với dữ liệu chứa dấu phẩy hoặc xuống dòng, hãy dùng thư viện đọc CSV đúng chuẩn thay vì công cụ nhanh này.
Mở tệp CSV tiếng Việt trong Excel mà không bị lỗi phông
Đây là vấn đề gặp gần như chắc chắn khi làm việc với dữ liệu tiếng Việt. Kết quả bạn chép ra là văn bản mã hóa theo bộ ký tự phổ dụng, nhưng khi bạn dán vào trình soạn thảo rồi lưu thành tệp có phần mở rộng csv và mở bằng cách nhấp đúp, Excel trên Windows thường đoán bộ mã theo cài đặt vùng của hệ thống chứ không đoán đúng, và mọi dấu tiếng Việt biến thành ký tự lạ. Có ba cách xử lý. Cách gọn nhất là đừng nhấp đúp: mở Excel trước, vào thẻ dữ liệu, chọn chức năng lấy dữ liệu từ tệp văn bản, rồi chỉ định bộ mã là UTF-8 trong hộp thoại nhập. Cách thứ hai là lưu tệp kèm dấu hiệu nhận dạng bộ mã ở đầu tệp, nhiều trình soạn thảo cho phép chọn kiểu lưu này. Cách thứ ba là dán thẳng nội dung vào Google Sheets rồi tách cột bằng chức năng tách văn bản thành cột, cách này bỏ qua hoàn toàn chuyện bộ mã.
Dữ liệu lồng nhau: chỗ mà bảng phẳng không theo kịp JSON
JSON là cấu trúc cây nên một trường có thể chứa cả một đối tượng hoặc cả một mảng, còn CSV và bảng trong cơ sở dữ liệu quan hệ đều là lưới phẳng. Khi công cụ gặp một giá trị là đối tượng, nó chuyển giá trị đó thành chuỗi theo cách mặc định của ngôn ngữ và bạn sẽ thấy một ô ghi một chuỗi vô nghĩa thay vì dữ liệu thật; với mảng thì các phần tử bị nối lại bằng dấu phẩy và làm hỏng luôn cấu trúc cột. Có ba cách xử lý tùy tình huống. Nếu cấu trúc lồng nông và cố định, hãy làm phẳng trước khi dán vào, đặt tên cột theo đường dẫn, chẳng hạn một trường địa chỉ có thành phố và quận thì tách thành hai cột riêng. Nếu trường lồng là một mảng nhiều phần tử, đó là quan hệ một nhiều và cách đúng là tách thành hai bảng nối với nhau bằng khóa, không nên nhồi vào một ô. Nếu chỉ cần lưu nguyên khối để đọc lại sau, hãy giữ nó ở dạng chuỗi JSON và dùng kiểu cột dành cho dữ liệu JSON trong cơ sở dữ liệu.
Kiểm tra gì trước khi chạy các câu lệnh chèn dữ liệu
Kết quả sinh ra là các câu lệnh chèn thuần túy, không kèm lệnh tạo bảng và không kiểm tra xem bảng đích có tồn tại hay có đúng cột hay không, nên có mấy việc bạn phải tự làm. Thứ nhất, đối chiếu tên cột với lược đồ bảng thật; tên cột lấy nguyên từ khóa JSON nên nếu khóa có dấu cách, chữ hoa hay trùng từ khóa của hệ quản trị thì bạn phải bọc chúng theo cú pháp riêng của hệ quản trị đang dùng. Thứ hai, kiểm tra kiểu dữ liệu: giá trị lôgic sẽ ra dạng chuỗi trong dấu nháy, ngày tháng cũng vậy, nên hãy chắc rằng cột đích chấp nhận hoặc tự ép kiểu được. Thứ ba, phân biệt giá trị rỗng thật với chuỗi rỗng, vì hai thứ này khác nhau khi truy vấn sau này. Thứ tư, mỗi bản ghi là một câu lệnh riêng, nên với vài nghìn dòng thì nên gộp lại thành lệnh chèn nhiều dòng hoặc dùng công cụ nhập theo lô cho nhanh hơn nhiều. Cuối cùng, luôn chạy trong một giao dịch có thể hoàn tác và sao lưu trước khi chạy trên dữ liệu thật.
Câu hỏi thường gặp (FAQ)
Vì sao một số trường trong JSON của tôi biến mất khỏi tệp CSV?
Vì danh sách cột được lấy từ các khóa của phần tử đầu tiên trong mảng, các phần tử sau chỉ được đọc đúng những khóa đó. Nếu bản ghi thứ mười có thêm một trường mà bản ghi đầu không có thì trường đó bị bỏ qua. Cách xử lý là sắp xếp để bản ghi đầy đủ nhất nằm đầu, hoặc bổ sung khóa còn thiếu vào bản ghi đầu.
Vì sao cột bị lệch khi chuyển CSV sang JSON?
Vì phần tách dòng cắt thẳng theo dấu phẩy mà không hiểu các ô được bọc trong dấu nháy kép. Một ô như địa chỉ có chứa dấu phẩy sẽ bị tách thành hai cột và mọi cột phía sau lệch theo. Với dữ liệu có dấu phẩy bên trong, hãy dùng thư viện đọc CSV đúng chuẩn thay vì công cụ nhanh này.
Công cụ có nhận tệp CSV dùng dấu chấm phẩy làm dấu ngăn không?
Không, chỉ nhận dấu phẩy. Tệp xuất từ Excel trên máy cài vùng dùng dấu phẩy làm dấu thập phân thường dùng dấu chấm phẩy làm dấu ngăn cột. Bạn hãy thay toàn bộ dấu chấm phẩy thành dấu phẩy trước khi dán vào, nhưng nhớ kiểm tra dữ liệu bên trong có chứa dấu phẩy không để tránh làm hỏng thêm.
Mở tệp CSV trong Excel thì tiếng Việt bị lỗi phông, xử lý sao?
Đừng nhấp đúp vào tệp. Hãy mở Excel trước, vào thẻ dữ liệu, chọn chức năng lấy dữ liệu từ tệp văn bản rồi chỉ định bộ mã UTF-8 trong hộp thoại nhập. Cách khác là lưu tệp kèm dấu hiệu nhận dạng bộ mã ở đầu, hoặc dán thẳng vào Google Sheets rồi dùng chức năng tách văn bản thành cột.
Trường lồng nhau trong JSON thì chuyển ra sao?
Không chuyển được thành ô bảng có nghĩa. Giá trị là đối tượng sẽ thành một chuỗi vô nghĩa, còn mảng thì các phần tử bị nối bằng dấu phẩy và làm hỏng cấu trúc cột. Hãy làm phẳng trước khi dán vào bằng cách tách thành các cột riêng theo đường dẫn, hoặc tách quan hệ một nhiều thành hai bảng nối bằng khóa.
Kết quả CSV có ô nhiều dòng thì có vấn đề gì?
Có. Ký tự xuống dòng bên trong một ô lẽ ra phải nằm trong cặp nháy kép, nhưng phần chuyển đổi chỉ bọc nháy khi ô chứa dấu phẩy hoặc dấu nháy, không xét ký tự xuống dòng. Vì vậy trường ghi chú nhiều dòng sẽ làm tệp vỡ khi mở bằng bảng tính, và bạn phải thay ký tự xuống dòng trước khi chuyển.
Vì sao mọi giá trị trong JSON sinh ra đều là chuỗi?
Vì phần chuyển từ CSV không suy đoán kiểu dữ liệu, mọi ô đều được giữ nguyên dạng văn bản. Đây thực ra là lựa chọn an toàn, vì việc tự đoán kiểu hay làm hỏng mã sản phẩm có số 0 ở đầu, số điện thoại và mã bưu chính. Nếu cần kiểu số, bạn ép kiểu ở bước xử lý tiếp theo.
Câu lệnh sinh ra có kèm lệnh tạo bảng không?
Không, chỉ có các câu lệnh chèn dữ liệu. Bạn phải tự tạo bảng với đúng tên cột và kiểu dữ liệu trước. Tên cột được lấy nguyên từ khóa JSON, nên nếu khóa có dấu cách, chữ hoa hoặc trùng từ khóa của hệ quản trị thì bạn phải bọc theo cú pháp riêng của hệ quản trị đang dùng.
Giá trị đúng sai và ngày tháng được sinh ra thế nào?
Chỉ giá trị kiểu số mới được ghi trần không bọc nháy, còn lại đều bọc trong dấu nháy đơn, kể cả giá trị lôgic và chuỗi ngày tháng. Hãy kiểm tra cột đích có chấp nhận hoặc tự ép kiểu được không; với một số hệ quản trị bạn cần chuyển đổi tường minh trước khi chèn.
Có an toàn khi chạy thẳng các câu lệnh này trên cơ sở dữ liệu thật không?
Không nên. Hãy chạy thử trên môi trường kiểm thử trước, sau đó chạy trên môi trường thật trong một giao dịch có thể hoàn tác và sau khi đã sao lưu. Dấu nháy đơn trong chuỗi có được nhân đôi, nhưng tên bảng và tên cột thì đi thẳng vào câu lệnh mà không qua bước kiểm tra nào.
Xử lý được bao nhiêu bản ghi một lần?
Không có giới hạn cứng, nhưng vì mọi thứ chạy trong trình duyệt nên vài nghìn bản ghi là ngưỡng thực tế trước khi trang bắt đầu chậm. Với tập dữ liệu lớn hơn, hãy dùng công cụ dòng lệnh hoặc chức năng nhập theo lô của hệ quản trị cơ sở dữ liệu, vừa nhanh hơn vừa an toàn hơn.
Dữ liệu tôi dán vào có được gửi đi đâu không?
Không. Cả ba chiều chuyển đổi đều chạy bằng JavaScript ngay trong trình duyệt, không có bước gọi máy chủ, và cũng không có gì được lưu lại sau khi bạn đóng tab. Nhờ vậy bạn dùng được với dữ liệu khách hàng hay dữ liệu nội bộ mà không phải tải chúng lên bất kỳ dịch vụ nào.
Từ khóa liên quan
- chuyển json sang csv
- chuyển csv sang json
- json to sql insert
- json converter online
- công cụ chuyển đổi json
- định dạng csv chuẩn
- mở file csv tiếng Việt bị lỗi font
- csv utf-8 trong excel
- làm phẳng json lồng nhau
- sinh câu lệnh insert từ json
- json array to table
- chuyển dữ liệu api sang excel
- dấu phẩy trong ô csv
- csv dùng dấu chấm phẩy
- import csv vào cơ sở dữ liệu
- kiểu dữ liệu khi import csv
- json là gì
- xuất dữ liệu ra excel
- chuyển đổi dữ liệu online miễn phí
- công cụ cho lập trình viên
