Tiếng Việt

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

Tại sao TOML có loại ngày giờ gốc còn JSON thì không (RFC 3339)

· Lý lịch

toml json dấu thời gian

Bốn giá trị tạm thời TOML thu hẹp thành các chuỗi JSON được trích dẫn mà không phát minh ra vùng
Hình minh họa vector ToolAcre gốc

TOML là định dạng duy nhất trong nhóm này có ngày và giờ hạng nhất, tất cả được xác định bởi RFC 3339. Bài đăng này giải thích bốn loại ngày giờ TOML, tại sao JSON cố tình không có loại nào và việc chuyển đổi có liên quan gì đến chúng.

Ngày đã trở thành một chuỗi — cấu hình TOML có ngày phát hành, được chuyển đổi thành JSON và rút gọn thành văn bản

Ngày địa phương TOML chẳng hạn như `1979-05-27` trở thành chuỗi JSON `"1979-05-27"`. Các ký tự lịch tồn tại nhưng loại TOML gốc thì không. Việc chuyển đổi JSON trở lại sẽ ghi một chuỗi được trích dẫn chứ không phải mã thông báo ngày và ToolAcre cảnh báo ở lần chuyển đổi đầu tiên.

Đây là ranh giới không thể tránh khỏi trong giá trị JSON đơn giản đã chọn. Gọi chuyến đi khứ hồi không mất dữ liệu sẽ nhầm lẫn giữa văn bản được bảo tồn với loại được bảo tồn. Cảnh báo đặt tên cho cả đường dẫn và loại thời gian để người đánh giá có thể quyết định liệu một chuỗi có được chấp nhận ở phía dưới hay không.

Tại sao JSON không có loại ngày — chủ nghĩa tối giản của Crockford, quy ước chuỗi ISO 8601 và quy ước mili giây kể từ kỷ nguyên cạnh tranh để lấp đầy khoảng trống

JSON phân tích cú pháp ở đây tạo ra null, booleans, số, chuỗi, mảng và đối tượng; nó không tạo ra các đối tượng Date. Kho lưu trữ chứng minh thực tế triển khai đó nhưng không đưa ra các giải thích mang tính lịch sử cho chủ nghĩa tối giản hoặc các quy ước cạnh tranh trong ngành của JSON.

Ứng dụng có thể chấp nhận các chuỗi hoặc số kỷ nguyên giống ISO theo thỏa thuận nhưng đó là các quy ước được xếp lớp trên JSON. Trình chuyển đổi cú pháp không suy ra một từ văn bản tùy ý và không chuyển đổi các giá trị thời gian TOML thành số học kỷ nguyên.

JSON không có loại ngày gốc trong trình chuyển đổi này; lý do nguồn gốc là bằng chứng bên ngoài kho lưu trữ

TOML hiển thị bốn loại: ngày giờ chênh lệch với phần bù Z hoặc số, ngày giờ địa phương không có vùng, ngày địa phương và giờ địa phương. smol-toml thể hiện chúng dưới dạng các đối tượng giống ngày tháng mang siêu dữ liệu loại; ToolAcre xác định từng cái trước khi chuẩn hóa nó.

Sự khác biệt ngăn ngừa một sai lầm nghiêm trọng. Giờ địa phương không được chỉ định âm thầm UTC và ngày giờ địa phương không được di chuyển giữa các vùng. Phần bù vắng mặt của nó vẫn không có trong chuỗi JSON.

RFC 3339 làm nền tảng — hồ sơ của ISO 8601 mà TOML mượn, bao gồm cả trợ cấp dấu phân cách

Trình chuẩn hóa gọi trình định dạng ISO của giá trị phân tích cú pháp và chỉ xóa phân số `.000` tổng hợp. Nó bảo tồn các giây phân đoạn có ý nghĩa và dạng cục bộ so với dạng bù theo hướng nguồn. Mã này mô tả điều này dưới dạng văn bản RFC 3339, nhưng bài viết không phát minh ra các mệnh đề đặc tả chẳng hạn như giới hạn phân cách vượt quá kết quả đầu ra được kiểm tra.

Một ví dụ bù đắp vẫn giữ nguyên văn bản ngày giờ thay vì được lớp này chuyển đổi thành giá trị Z phổ quát. Điều đó tránh thay đổi cách trình bày bằng văn bản và giữ nguyên cách diễn giải tạm thời cho ứng dụng sở hữu nó.

ToolAcre giữ lại văn bản tạm thời hướng nguồn mà không xác nhận chi tiết tuân thủ đầy đủ RFC 3339

Mọi giá trị tạm thời sẽ trở thành một chuỗi và các cảnh báo cho biết rằng JSON, YAML và XML không có loại ngày trong mô hình chuyển đổi này. Các giá trị bù đắp không bị loại bỏ một cách có chủ ý và các giá trị cục bộ không đạt được giá trị đó. Thông tin bị mất chính là danh mục loại TOML.

Khi chuyển đổi ngược lại, chuỗi được trích dẫn vì người viết không có điểm đánh dấu nào yêu cầu chuỗi đó khôi phục ngày giờ. Việc phân tích lại các chuỗi trông theo ngày tùy ý dưới dạng ngày sẽ nhập sai số nhận dạng hoặc nhãn thông thường và sẽ tạo ra một quy ước không được chia sẻ bởi JSON.

Trình chuyển đổi giữ nguyên chính tả cục bộ so với chính tả bù, sau đó mất loại TOML gốc

Sử dụng `odt = 1979-05-27T07:32:00Z`, `ldt = 1979-05-27T07:32:00`, `ld = 1979-05-27` và `lt = 07:32:00`. JSON chứa bốn chuỗi có cách viết như vậy. Danh sách cảnh báo bù đắp các đường dẫn ngày giờ, ngày giờ địa phương, ngày địa phương và giờ địa phương.

Chuyển đổi JSON trở lại TOML. Mỗi giá trị được trích dẫn. Phân số `00.500Z` vẫn là phân số, trong khi giá trị nguyên giây không thu được `.000`. Đây là hành vi được hỗ trợ thực tế và thể hiện rõ ràng văn bản được giữ nguyên so với loại bị mất.

Ví dụ đã hoạt động: tất cả bốn loại thời gian TOML đều trở thành chuỗi và trả về dấu ngoặc kép

Tra cứu quy tắc múi giờ, chuyển đổi tiết kiệm ánh sáng ban ngày và chuyển đổi kỷ nguyên không nằm trong lộ trình này. Ngày giờ địa phương không có vùng không thể trở thành một thời điểm duy nhất nếu không có thêm thông tin. Trình chuyển đổi dấu thời gian Unix xử lý các thời điểm đã biết theo một hợp đồng khác.

Không cung cấp mọi chuỗi kết quả vào Ngày JavaScript và mang ý nghĩa tương đương. Ngày địa phương, giờ địa phương và ngày giờ không vùng yêu cầu ngữ cảnh ứng dụng. Duy trì cảnh báo và ngữ nghĩa trường thông qua quá trình di chuyển.

Bài học rút ra: TOML biết ngày là gì, JSON chỉ biết chuỗi là gì — và cách bảng điều khiển Trình chuyển đổi cú pháp hiển thị sự khác biệt đó trong trình duyệt của bạn

TOML biết bốn loại thời gian; JSON chỉ nhận được chuỗi ở đây. ToolAcre giữ nguyên chính tả một cách cẩn thận và từ chối tạo vùng, nhưng kiểu gốc đã biến mất và không thể tự động được xây dựng lại khi trả về.

Xem lại mọi đường dẫn được cảnh báo và xác định quy ước ứng dụng khi ngữ nghĩa tạm thời phải tồn tại. Nếu không tồn tại quy ước như vậy, hãy giữ TOML làm nguồn đáng tin cậy thay vì coi chuyến đi khứ hồi được trích dẫn là tương đương.

Quy ước âm thanh cũng đặt tên cho chuỗi nào có thể được phân tích cú pháp lại và theo ngữ cảnh nào. Ngày giờ bù trừ có thể xác định tức thời, trong khi ngày giờ, ngày hoặc giờ cục bộ không thể làm như vậy nếu không có quy tắc bổ sung. Lưu trữ loại ban đầu bên cạnh chuỗi đã chuẩn hóa khi giai đoạn sau cần xây dựng lại TOML hoặc lên lịch công việc. Nếu không, hãy chấp nhận rằng JSON đang mang văn bản hiển thị và tránh âm thầm quảng cáo văn bản đó lên dấu thời gian chung.