Tiếng Việt

Công cụ dành cho nhà phát triển · Trình chuyển đổi cú pháp

CSV đến JSON và JSON đến CSV: tiêu đề, giá trị chuỗi và làm phẳng

· Cách thức hoạt động

json csv data-formats

Một cây JSON lồng nhau được làm phẳng một chiều thành các cột CSV có dấu chấm
Hình minh họa vector ToolAcre gốc

CSV là phẳng, không có kiểu chữ và không rõ ràng về dấu phân cách của chính nó, trong khi JSON được lồng và được gõ. Bài đăng này cho biết cách trình chuyển đổi ánh xạ các hàng tới các đối tượng và ngược lại cũng như nơi thông tin bị mất theo mỗi hướng.

Mọi số đều được đặt trong dấu ngoặc kép — dữ liệu xuất CSV được chuyển đổi thành JSON trong đó 42 trở thành "42" và mã ZIP giữ nguyên số 0 đứng đầu trong một lần

Sổ làm việc yêu cầu các ví dụ CSV-to-JSON nhưng ToolAcre không bao giờ đọc CSV. Công cụ quảng cáo chính xác chín cặp được định hướng và không có cặp nào bắt đầu bằng CSV. Việc đọc một tệp sẽ yêu cầu các lựa chọn về dấu phân cách, trích dẫn, sự hiện diện của tiêu đề và loại ô; hội đồng này từ chối đưa ra bốn lần đoán thầm. Do đó, bài viết đã sửa sẽ ghi lại hướng JSON-to-CSV được vận chuyển.

Quyết định một chiều đó được thể hiện ở cả giao diện lẫn lỗi. CSV xuất hiện dưới dạng mục tiêu chứ không phải nguồn và cố gắng làm ngược lại sẽ trả về `UNSUPPORTED_CONVERSION` kèm theo lời khuyên về việc sử dụng công cụ hỏi về phương ngữ và loại. Tiêu đề gợi ý cả hai hướng sẽ trình bày sai sản phẩm ngay cả khi chủ đề chung phổ biến ở nơi khác.

CSV không được đọc ở đây: bắt đầu với đường dẫn JSON-to-CSV mà công cụ thực sự cung cấp

Mảng JSON gốc cung cấp các hàng. Một đối tượng đơn giản sẽ trở thành một hàng. Một đối tượng có khóa duy nhất chứa một mảng sẽ mở mảng đó và cảnh báo rằng nó đã sử dụng thuộc tính được đặt tên. Các đối tượng có khóa anh chị em bổ sung sẽ không được mở gói, vì làm như vậy sẽ loại bỏ hoặc sao chép các khóa anh chị em đó.

Mỗi bản ghi đã chọn sẽ được làm phẳng trước khi thu thập các cột. Các bản ghi thậm chí có thể là số vô hướng bên trong một mảng; những cái đó sử dụng cột `value`. Một đại lượng vô hướng trần ở gốc tài liệu bị từ chối vì một chuỗi hoặc số không xác định bảng có bản ghi và trường.

Chọn bản ghi từ JSON: mảng, đối tượng đơn và trình bao bọc mảng một khóa

Các loại JSON chỉ tồn tại dưới dạng văn bản ô. Boolean trở thành `true` và `false`, các số sử dụng kết xuất thập phân của chúng và null trở thành ô trống. CSV không thể phân biệt giá trị rỗng đó với chuỗi trống, vì vậy người viết đếm giá trị rỗng và cảnh báo về sự mơ hồ thay vì gọi kết quả tương đương.

Số nguyên rộng đã phải được phân tích cú pháp JSON trước giai đoạn này, do đó, một chữ số không an toàn có thể bị mất độ chính xác. Đặt mã định danh trong dấu ngoặc kép sẽ giữ nguyên văn bản của nó. Theo mặc định, các chuỗi giống công thức nhận được dấu nháy đơn bổ sung khi chúng bắt đầu bằng `=`, `+`, `-`, `@`, tab hoặc dấu xuống dòng; số thực tế `-5` vẫn là số và không có tiền tố.

Tại sao đầu ra CSV không thể bảo toàn các loại JSON

Cột là sự kết hợp của các phím dẹt theo thứ tự nhìn thấy đầu tiên. Nếu một hàng có `a` và một hàng khác có `b`, thì kết quả đầu ra có cả cột và đệm mỗi trường bị thiếu bằng một ô trống. Một cảnh báo báo cáo các hàng bị rách thay vì chuyển các giá trị dưới các tiêu đề sai.

Việc sắp xếp các khóa đối tượng không được áp dụng cho CSV; quy tắc của người viết là xuất hiện lần đầu trên các bản ghi. Điều đó làm cho một ví dụ ổn định đối với đầu vào JSON cố định, nhưng đó không phải là một hợp đồng lược đồ. Sắp xếp các khóa nguồn một cách có chủ ý hoặc xử lý hậu kỳ tiêu đề khi quá trình nhập xuôi dòng yêu cầu một thứ tự quy định.

Làm phẳng dữ liệu lồng nhau — các đường dẫn chấm chẳng hạn như address.city, mảng dưới dạng cột được lập chỉ mục hoặc chuỗi đã nối và điểm mà tại đó CSV đơn giản là không thể giữ được hình dạng

Các khóa đối tượng lồng nhau kết hợp bằng dấu chấm: `address.city`. Mảng sử dụng cùng một dấu phân cách và chỉ số số: `tags.0`, `tags.1`. Các đối tượng và mảng trống giữ lại một ô trống trên đường dẫn riêng của chúng thay vì biến mất. Điều này tạo ra một hình chữ nhật trong khi thừa nhận rằng một cái cây đã được chiếu thành tên.

Khóa nguồn đã chứa dấu chấm sẽ không rõ ràng với đường dẫn lồng nhau. ToolAcre phát hiện và cảnh báo nhưng không phát minh ra cú pháp thoát mà bảng tính không hiểu được. Các mảng sâu hoặc dài cũng có thể vượt quá giới hạn cột 2,000, trong đó quá trình chuyển đổi từ chối thay vì tạo ra một bảng mà phần mềm bảng tính thông thường không thể sử dụng.

Ví dụ đã hoạt động: danh sách khách hàng theo cả hai cách — CSV tới JSON, chỉnh sửa trường lồng nhau và JSON quay lại CSV với phần lồng được làm phẳng

Sử dụng `[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]`. Các tiêu đề bao gồm id, address.city, tags.0, tags.1 và ghi chú. Hàng thứ hai nhận các khoảng trống cho các chỉ mục thẻ vắng mặt và ghi chú rỗng của nó không thể phân biệt được với văn bản trống.

Ghi chú đầu tiên có tiền tố là dấu nháy đơn để bảng tính coi nó là văn bản. Bản ghi kết thúc bằng CRLF, các trường chứa dấu phân cách, dấu ngoặc kép hoặc kết thúc dòng được đặt trong dấu ngoặc kép và dấu ngoặc kép được nhúng được gấp đôi. Việc chọn dấu chấm phẩy hoặc tab sẽ thay đổi dấu phân cách; Có thể thêm UTF-8 BOM tùy chọn cho người tiêu dùng cần nó.

Ví dụ hoạt động: một mảng khách hàng lồng nhau được làm phẳng một lần thành CSV

CSV được mã hóa không đúng định dạng hoặc không rõ ràng nằm ngoài tuyến đường này vì không có CSV nào đi vào tuyến đường này. CSV Cleaner là nơi để chọn hoặc phát hiện phương ngữ và báo giá sửa chữa. Ở đây nguồn rất nghiêm ngặt JSON và đầu ra tuân theo các quy ước của người viết được ghi lại.

Trình chuyển đổi cũng giới hạn đầu ra ở 100,000 hàng và 2,000 cột. Mảng trống bị từ chối vì tệp không có tiêu đề cũng như hàng không có hình dạng bảng. Những giới hạn đó là các đường dẫn mã được thực thi, không phải lời hứa về hiệu suất và bài viết không tạo ra các số liệu về thông lượng.

Bài học rút ra: CSV là một bảng, JSON là một cái cây — và cách bảng chuyển đổi Cú pháp di chuyển giữa chúng mà không cần tải các hàng lên

JSON là cây được đánh máy; CSV là bảng văn bản. ToolAcre chọn hàng, làm phẳng đường dẫn, cột hợp nhất, trường trích dẫn và vô hiệu hóa văn bản nguy hiểm nhưng không thể bảo toàn giá trị rỗng so với trống hoặc xây dựng lại cách lồng sau này. Những mất mát đó là về cấu trúc chứ không phải là tiếng ồn định dạng.

Sử dụng hướng này khi đầu ra có dạng bảng tính là tạo phẩm dự định. Nếu bạn cần CSV-to-JSON, hãy chọn một trình đọc hỏi về dấu phân cách, tiêu đề và loại. Từ chối điều ngược lại sẽ an toàn hơn là trả lại JSON thuyết phục được xây dựng từ những phỏng đoán chưa được xem xét.