Dữ liệu & bảng tính · CSV Trình dọn dẹp
Chuyển đổi giữa CSV và JSON: Hình dạng, loại và những gì bị mất
· Cách thức hoạt động
csv json data-formats
CSV là văn bản phẳng và JSON là dữ liệu được nhập, lồng nhau, do đó việc chuyển đổi giữa chúng cần có các quyết định. Bài đăng này giải thích các hình dạng JSON phổ biến cho dữ liệu dạng bảng, cách các loại được suy ra hay không và những gì không thể tồn tại trong chuyến đi khứ hồi.
API muốn JSON, kết quả xuất là CSV và mọi số đều đến dưới dạng một chuỗi — tại sao hai định dạng không đồng nhất về loại
Việc xuất bảng tính có thể hiển thị 42 mà không cho biết những ký tự đó có nghĩa là số lượng, mã sản phẩm hay số nhận dạng. JSON có thể phân biệt một số với một chuỗi nhưng nguồn CSV không thể cung cấp sự phân biệt đó. ToolAcre do đó chọn cách biểu diễn thận trọng: mọi ô sẽ trở thành một chuỗi JSON, bao gồm các chữ số, các từ trông giống như thật và các ô trống.
Quyết định đó giữ nguyên văn bản như 0012 và làm cho chuyển đổi có thể dự đoán được khi tích hợp API. Điều đó cũng có nghĩa là mã xuôi dòng phải truyền các trường theo lược đồ riêng của nó trước khi thực hiện phép tính. Việc xử lý tệp được tạo như đã được nhập chỉ đơn thuần chuyển một giả định từ trình chuyển đổi sang mã ứng dụng ít hiển thị hơn.
Hình dạng mục tiêu thông thường - một mảng các đối tượng được khóa theo tiêu đề và tại sao các tiêu đề do đó cần phải rõ ràng và duy nhất
Tuyến tạo ra một mảng cấp cao nhất với một đối tượng cho mỗi hàng dữ liệu. Các ô tiêu đề trở thành khóa đối tượng và các giá trị được lấy từ cùng một vị trí cột. Tiêu đề thứ ba trống sẽ trở thành cột_3, trong khi tiêu đề thứ hai có tên id trở thành id_2 thay vì ghi đè trường id đầu tiên.
Những cái tên rõ ràng, độc đáo rất hữu ích nhưng trình chuyển đổi không viết thường, chuyển ngữ hoặc thay thế dấu cách. Nó chỉ cắt tiêu đề trong khi tính toán khóa, sau đó tạo ra tên vị trí hoặc hậu tố số khi cần thiết. Nếu API yêu cầu email_khách hàng thay vì Email khách hàng, hãy cố tình đổi tên cột đó trước khi dựa vào hợp đồng đầu ra.
Các hình dạng thay thế - mảng các mảng và các đối tượng hướng theo cột và khi mỗi mảng phù hợp hơn
Đề cương đề xuất các mảng và đối tượng hướng theo cột làm mục tiêu có thể lựa chọn. Chúng là những thiết kế dữ liệu hợp lý nhưng giao diện này không cung cấp chúng. Đầu ra của nó luôn là một mảng JSON gồm các bản ghi phẳng được khóa bởi hàng CSV đầu tiên, thụt vào bằng hai dấu cách để kiểm tra có thể đọc được.
Sự lựa chọn hạn hẹp đó sẽ loại bỏ sự mơ hồ về vị trí tồn tại của tên cột và giữ cho mọi bản ghi có hình dạng giống nhau. Nếu người tiêu dùng khác mong đợi mảng, hãy chuyển đổi JSON đã tải xuống theo lược đồ của người tiêu dùng đó. Tuyên bố rằng ToolAcre chọn trong số một số bố cục sẽ mô tả các điều khiển và nhánh không tồn tại trong cấu hình hoặc mã bảng điều khiển.
Trình chuyển đổi này phát ra một hình dạng: một mảng các vật thể phẳng cấp cao nhất
Không có kiểu đoán nào xảy ra. Văn bản CSV 42 trở thành "42", sai trở thành "false" và khoảng trống trở thành "" thay vì rỗng. Điều này được thể hiện rõ ràng trong bản ghi và triển khai công cụ, ánh xạ các ô trực tiếp tới các thuộc tính chuỗi. Tuyến không kiểm tra cột và quyết định rằng tất cả các giá trị không trống đều là số.
Việc bảo toàn chuỗi cũng tách biệt bài viết này khỏi cuộc thảo luận đã xuất bản về các ứng dụng bảng tính thay đổi số 0 ở đầu, ngày tháng và số nhận dạng dài. Vấn đề ở đây là hợp đồng thực tế của người chuyển đổi: nó tránh được kiểu ép buộc đó. Người tiêu dùng vẫn chịu trách nhiệm phân tích số lượng đã biết và giữ nguyên số nhận dạng.
Các loại được giữ nguyên dưới dạng văn bản; ToolAcre không thực hiện suy luận
Theo hướng ngược lại, ToolAcre chấp nhận mảng JSON cấp cao nhất có các mục là đối tượng. Nó xây dựng các cột từ sự kết hợp của các khóa trên mọi đối tượng, theo thứ tự nhìn thấy lần đầu, do đó trường được giới thiệu bởi bản ghi sau sẽ không bị mất. Các thuộc tính bị thiếu, rỗng và không xác định sẽ trở thành các ô CSV trống.
Một đối tượng hoặc mảng được lưu trữ bên trong một thuộc tính được tuần tự hóa dưới dạng văn bản JSON bên trong một ô đó. Điều này bảo tồn cách trình bày văn bản nhưng không biến cấu trúc lồng nhau thành các cột hoặc hàng bổ sung. Một gốc không phải mảng và một mảng chứa các giá trị nguyên thủy bị từ chối vì không khớp với mô hình bảng mà tuyến đường này hỗ trợ.
JSON-to-CSV chấp nhận một mảng đối tượng và ghi các giá trị lồng nhau dưới dạng văn bản JSON
Hãy xem xét tên,hoạt động,số lượng theo sau là Ada,true,007. Kết quả JSON là một mảng chứa một đối tượng có tên "Ada", hoạt động "true" và đếm "007". Việc chuyển đổi mảng đối tượng phẳng đó trở lại sẽ tạo ra ba ô văn bản giống nhau vì không có suy luận kiểu nào loại bỏ các số 0 hoặc chuyển đổi từ có dạng boolean.
Bây giờ hãy thêm tiêu đề trống trước giá trị khác. Khóa JSON trở thành cột_4, do đó dữ liệu vẫn có thể truy cập được ngay cả khi thiếu tên nguồn. Tuy nhiên, hãy thêm một ô bổ sung ngoài chiều rộng tiêu đề và trình tải sẽ cảnh báo về một hàng rách rưới; ô thừa đó không có khóa và không có trong JSON.
Điều này không bao gồm những gì — JSON được lồng sâu, xác thực lược đồ và truyền trực tuyến các tài liệu JSON rất lớn
Tuyến đường không phải là trình xác thực lược đồ, trình làm phẳng đệ quy hoặc bộ xử lý JSON phát trực tuyến. Nó chấp nhận một hình dạng được ghi lại và báo cáo JSON không hợp lệ hoặc các gốc không được hỗ trợ kèm theo một lỗi cụ thể. Các bản ghi được lồng sâu cần một ánh xạ được thiết kế xung quanh miền của chúng thay vì lời hứa tự động rằng dấu câu trong khóa sẽ tạo ra cấu trúc.
Việc kiểm tra tệp đầu vào cho phép các tệp có tối đa 50 MB đã được định cấu hình và quá trình phân tích cú pháp CSV sẽ diễn ra trong một trình chạy. Những thông tin thực tế đó không thiết lập tính năng phát trực tuyến: văn bản tệp và các hàng đã hoàn thành vẫn được cụ thể hóa để chuyển đổi. Đối với quy trình làm việc JSON rất lớn, hãy sử dụng hệ thống có quá trình triển khai ghi lại rõ ràng việc phân tích cú pháp tăng dần thay vì suy ra ở đây.
Xác thực lược đồ, mảng nguyên thủy và gốc không phải mảng nằm ngoài hình dạng được chấp nhận
Chuyển đổi là một tập hợp các lựa chọn hiển thị: hàng đầu tiên làm khóa, đối tượng phẳng làm bản ghi và chuỗi làm giá trị. ToolAcre làm cho những lựa chọn đó trở nên ổn định thay vì đoán từ mẫu. Các tiêu đề trống và lặp lại nhận được các khóa xác định, trong khi đầu vào rời rạc được hiển thị trước khi một giá trị thặng dư không tên có thể biến mất mà không được chú ý.
Sử dụng bản xem trước để xác nhận dấu phân cách và hình dạng hàng, giải quyết các cảnh báo, sau đó tải xuống hoặc sao chép JSON. Tệp kết quả phù hợp với mã biết lược đồ của chính nó. Nó không cố ý thay thế cho lược đồ đó và sự hạn chế của nó là thứ bảo vệ ID văn bản trong quá trình thay đổi định dạng.