Tiếng Việt

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

Bốn mô hình dữ liệu được so sánh: tại sao JSON, YAML, TOML và XML không bao giờ lập bản đồ 1:1

· Lý lịch

data-formats json yaml

Bốn hình dạng mô hình dữ liệu riêng biệt gặp nhau tại một trung tâm chuyển đổi bị ràng buộc
Hình minh họa vector ToolAcre gốc

Mọi chuyển đổi giữa các định dạng này đều bị mất ở đâu đó vì mỗi định dạng được thiết kế dựa trên một mô hình dữ liệu khác nhau. Bài đăng này so sánh các hệ thống loại và cấu trúc của chúng để bạn có thể dự đoán chuyển đổi nào sẽ giữ nguyên và chuyển đổi nào sẽ giảm.

Cấu hình không quay vòng — một tệp được chuyển đổi qua ba định dạng và các trường trả về khác nhau

Một đối tượng thông thường chứa số, chuỗi, boolean, mảng và đối tượng lồng nhau an toàn có thể tồn tại trong các thử nghiệm JSON-to-YAML-to-JSON và JSON-to-TOML-to-JSON. Thêm giá trị rỗng trước TOML, ngày giờ từ TOML, nội dung XML hỗn hợp hoặc nhận xét YAML và một số thay đổi về giá trị hoặc thông tin nguồn.

Câu hỏi hữu ích không phải là liệu việc chuyển đổi có bị tổn thất trên toàn cầu hay không. Đó là lớp đầu vào và hướng nào bảo toàn các thuộc tính bạn cần. Những cảnh báo và từ chối của ToolAcre làm cho ma trận đó có thể được quan sát thay vì giảm mỗi cặp thành một lời hứa tiếp thị.

Cấu hình đại diện có thể đi khứ hồi qua một số cặp, nhưng không phải mọi hình dạng được hỗ trợ

JSON cung cấp null, booleans, số, chuỗi, mảng và đối tượng trong trình phân tích cú pháp này. Nó không có nhận xét, kiểu ngày giờ hoặc cú pháp tham chiếu chia sẻ. JavaScript phân tích các số dưới dạng IEEE-754 tăng gấp đôi, do đó, một số nguyên đã không được trích dẫn nằm ngoài phạm vi an toàn có thể mất độ chính xác trước khi người viết khác nhìn thấy nó.

Các khóa đối tượng là các chuỗi và việc sắp xếp tùy chọn sẽ thay đổi cách trình bày của chúng. Mảng vẫn có thứ tự. Phân tích cú pháp nghiêm ngặt sẽ từ chối nhận xét, dấu phẩy ở cuối và mã thông báo số không hữu hạn, thiết lập đường cơ sở nhỏ gọn cho những người đọc khác.

Mô hình giá trị của JSON được triển khai JavaScript này sử dụng

ToolAcre chấp nhận YAML thông qua các lược đồ cốt lõi hoặc JSON bị hạn chế. Các neo và bí danh được giải quyết, các nhận xét biến mất, các luồng trở thành mảng, các khóa trùng lặp giữ giá trị cuối cùng kèm theo cảnh báo và các bí danh đệ quy hoặc gây nổ bị từ chối.

Các thẻ tùy chỉnh, nhị phân, dấu thời gian, tập hợp và các hàm tạo đối tượng ngôn ngữ đều bị từ chối. Core Infinity và NaN trở thành null ở định dạng đích kèm theo cảnh báo. Đây có chủ ý là một tập hợp con của hệ thống thẻ rộng hơn của YAML chứ không phải là tuyên bố hỗ trợ đối tượng YAML hoàn chỉnh.

Mô hình YAML bị hạn chế ToolAcre chấp nhận

TOML bắt đầu bằng một bảng và hỗ trợ các chuỗi, số nguyên có dấu, số float, boolean, mảng, bảng và bốn loại tạm thời. Nó không có giá trị rỗng. ToolAcre chuyển đổi ngày và giờ thành chuỗi hướng nguồn và số nguyên rộng thành chuỗi thập phân thay vì mất chữ số.

Khi viết TOML, các khóa đối tượng null bị bỏ qua và các mục trong mảng null trở thành chuỗi trống. Mảng gốc và vô hướng bị từ chối. Nhận xét và sự lựa chọn của tác giả trong số các tiêu đề, phím chấm và bảng nội tuyến không trả về một giá trị đơn giản.

Bảng gốc, giá trị tạm thời và ranh giới rỗng của TOML

XML được chiếu dưới dạng cây với các thuộc tính `@`, các khóa con thông thường, `#text`, `#cdata`, mảng anh chị em lặp lại và tiền tố không gian tên theo nghĩa đen. Các nhận xét, khai báo và hướng dẫn xử lý đều bị loại bỏ. Vị trí của văn bản hỗn hợp bị mất và không thể biết được một so với nhiều trước khi sự lặp lại xuất hiện.

Các giá trị được đọc dưới dạng chuỗi trừ khi suy luận được chọn. Giá trị rỗng được viết từ JSON trở thành phần tử trống và không thể phân biệt được với chuỗi trống khi trả về. Mọi DOCTYPE đều bị từ chối và các tên không hợp lệ sẽ ngừng tuần tự hóa thay vì được viết lại.

Phép chiếu XML của ToolAcre: các phần tử, thuộc tính, tiền tố văn bản và chữ

Tàu chín hướng: JSON tới YAML, XML, TOML và CSV; YAML tới JSON và TOML; TOML đến JSON và YAML; XML đến JSON. Các giá trị thông thường có hình JSON có giá trị tốt nhất trong khoảng JSON và YAML. TOML giới thiệu ranh giới ngày và không. XML yêu cầu quy ước đặt tên và danh mục nút.

CSV là giá trị ngoại lệ phẳng và chỉ là đầu ra. Mảng hoặc các đối tượng được chọn sẽ trở thành hàng, các đường dẫn lồng nhau được làm phẳng thành các cột chấm, hợp nhất null với văn bản trống và các chuỗi giống công thức được vô hiệu hóa. CSV-to-JSON, XML-to-TOML và các cặp vắng mặt khác sẽ bị từ chối thay vì được suy luận.

Ma trận tương thích cho chín hướng vận chuyển, chỉ với CSV làm đầu ra

Các định dạng nhị phân và ngôn ngữ lược đồ nằm ngoài phạm vi. Lược đồ có thể khôi phục số lượng danh sách hoặc xác thực các hình dạng doanh nghiệp, trong khi mã hóa nhị phân giới thiệu các loại và khung cấp byte không được trình bày ở đây. Trình chuyển đổi không bao giờ yêu cầu những khả năng đó.

Chuyển đổi cú pháp cũng không chứng minh tính hợp lệ của ứng dụng. Thông báo đặt hàng YAML, XML hoặc tệp dự án TOML có hình dạng Kubernetes rõ ràng vẫn có thể vi phạm hợp đồng mục tiêu. Sử dụng trình xác thực tên miền sau khi kiểm tra ánh xạ cú pháp.

Bài học rút ra: chọn mô hình, sau đó là cú pháp — và cách bảng điều khiển Trình chuyển đổi cú pháp cho phép bạn kiểm tra một chuyển đổi trước khi thực hiện nó

Chọn mô hình dữ liệu trước khi chọn dấu câu của nó. Nếu nhận xét và bí danh quan trọng thì bước nhảy JSON không thể bảo tồn chúng. Nếu không có giá trị, đầu ra TOML sẽ thay đổi nó. Nếu nội dung hỗn hợp được sắp xếp có vấn đề thì phép chiếu JSON đơn giản là không đủ. Nếu đích đến là một bảng, JSON lồng nhau yêu cầu một quy ước làm phẳng rõ ràng.

Sử dụng ToolAcre để kiểm tra một tài liệu đại diện và đọc mọi cảnh báo. Kết quả là bằng chứng về một cặp và đầu vào cụ thể, không được phép gọi tất cả các chuyển đổi không mất dữ liệu hoặc mọi trình phân tích cú pháp được hỗ trợ đều hoàn tất.

Xây dựng tài liệu đại diện từ các ranh giới quan trọng đối với dịch vụ của bạn: rỗng, văn bản trống, số nhận dạng lớn, chuỗi giống ngày, một bản ghi lặp lại, nhận xét hoặc bí danh nếu có liên quan đến YAML và văn bản hỗn hợp nếu liên quan đến XML. So sánh các giá trị chuẩn hóa sau mỗi bước nhảy được hỗ trợ và giữ lại các cảnh báo kèm theo kết quả. Ma trận đó trở thành một yếu tố quyết định cho mô hình đã chọn thay vì một ưu tiên mơ hồ cho một cú pháp quen thuộc.