2008-09-18 15 views
19

Văn bản JSON (RFC 4627) có đại diện phi thường của các đối tượng, mảng, chuỗi, số, giá trị Boolean (nghĩa là true hoặc false) và null. Tuy nhiên, nó không có gì được định nghĩa để biểu diễn thông tin thời gian như ngày giờ trong ngày, điều này rất phổ biến trong các ứng dụng. Các phương pháp hiện tại được sử dụng để biểu diễn thời gian trong JSON bằng các ràng buộc và ngữ pháp được đặt ra trong RFC 4627 là gì?Cách trình bày thông tin ngày và/hoặc thời gian trong JSON?

Lưu ý đối với người trả lời: Mục đích của câu hỏi này là ghi lại các phương pháp khác nhau được lưu hành cùng với các ví dụ và ưu và khuyết điểm tương đối (lý tưởng từ kinh nghiệm thực địa).

Trả lời

2

Không có chữ được đặt để sử dụng những gì dễ dàng nhất cho bạn. Đối với hầu hết mọi người, đó là một chuỗi đầu ra UTC hoặc một số nguyên dài của mã thời gian làm trung tâm UTC.

đọc này cho nền hơn một chút: http://msdn.microsoft.com/en-us/library/bb299886.aspx

13

Các đại diện duy nhất mà tôi đã thấy trong sử dụng (tuy nhiên, phải thừa nhận, kinh nghiệm của tôi được giới hạn DOJO) là ISO 8601, hoạt động độc đáo, và đại diện cho bất cứ thứ gì bạn có thể nghĩ đến.

Ví dụ: bạn có thể truy cập liên kết ở trên.

Ưu điểm:

  • Đại diện cho khá nhiều bất cứ điều gì bạn có thể ném vào nó, bao gồm timespans. (Tức là 3 ngày, 2 giờ.)

Nhược điểm:

  • Umm ... Tôi không biết thực sự. Khác hơn có lẽ nó có thể mất một chút làm quen với? Đó là chắc chắn dễ dàng, đủ để phân tích cú pháp, nếu không có được xây dựng trong các chức năng để phân tích nó đã.
5

ISO 8601 có vẻ như một sự lựa chọn tự nhiên, nhưng nếu bạn muốn phân tích nó với JavaScript chạy trong một trình duyệt, bạn sẽ cần phải sử dụng một thư viện, cho trình duyệt hỗ trợ cho các bộ phận của JavaScript Date đối tượng có thể phân tích cú pháp các ngày ISO 8601 không nhất quán, ngay cả trong các trình duyệt tương đối mới. Một vấn đề khác với ISO 8601 là nó là một chuẩn lớn, phong phú và các thư viện ngày/giờ chỉ hỗ trợ một phần của nó, vì vậy bạn sẽ phải chọn một tập con của ISO 8601 để sử dụng được hỗ trợ bởi các thư viện bạn sử dụng.

Thay vào đó, tôi biểu thị thời gian là số mili giây từ 1970-01-01T00: 00Z. Điều này được hiểu bởi các nhà xây dựng cho các đối tượng Date trong nhiều trình duyệt cũ hơn, ít nhất là quay trở lại IE7 (đó là lâu đời nhất tôi đã thử nghiệm).

0

Tôi khuyên bạn nên sử dụng định dạng RFC 3339, đẹp và đơn giản và được hiểu bởi số lượng ngôn ngữ, thư viện và công cụ ngày càng tăng.

Thật không may, RFC 3339, thời gian epoch Unix và thời gian mili giây JavaScript, tất cả vẫn không hoàn toàn chính xác, vì không có tài khoản nào trong số đó nhảy vọt! Tại một số điểm, tất cả chúng ta sẽ phải xem xét lại các biểu diễn thời gian một lần nữa. Có lẽ lần sau chúng ta có thể làm được với nó.

0

Xin lỗi để nhận xét về câu hỏi cũ như vậy, nhưng trong những năm qua, nhiều giải pháp đã được bật lên.

Thông tin ngày và/hoặc thời gian đại diện trong JSON là một trường hợp đặc biệt của vấn đề tổng quát hơn về biểu diễn các loại phức tạp và cấu trúc dữ liệu phức tạp trong JSON. Một phần của vấn đề phức tạp là nếu bạn đại diện cho các kiểu phức tạp như timestamps như các đối tượng JSON, thì bạn cần phải có cách biểu diễn các mảng và đối tượng liên kết, giống như biểu diễn đối tượng JSON của bạn của một dấu thời gian. đối tượng được đánh dấu.

Google protocol buffersJSON mapping có khái niệm về loại dấu thời gian, với ngữ nghĩa được xác định.

Số BSON của MongoDB có số Extended JSON có nội dung { "$date": "2017-05-17T23:09:14.000000Z" }.

Cả hai cũng có thể thể hiện cách cấu trúc phức tạp hơn ngoài giờ.

Các vấn đề liên quan