2008-09-18 13 views
19

Tekst JSON (RFC 4627) ma jednoznaczną reprezentację obiektów, tablic, łańcuchów, liczb, wartości logicznych (dosłownie: true lub false) i null. Jednak nie ma nic określonego do reprezentowania informacji o czasie, takich jak data i godzina, co jest bardzo powszechne w aplikacjach. Jakie są obecne metody używane do reprezentowania czasu w JSON, biorąc pod uwagę ograniczenia i gramatykę określone w RFC 4627?Jak przedstawiać datę i/lub informacje o czasie w JSON?

Uwaga dla respondentów: Celem tego pytania jest udokumentowanie różnych metod będących w obiegu wraz z przykładami i względnymi zaletami i wadami (najlepiej z doświadczenia w terenie).

Odpowiedz

13

Jedyne przedstawienie, które widziałem w użyciu (choć, co prawda, moje doświadczenie jest ograniczona do DOJO) jest ISO 8601, co działa dobrze, a oznacza po prostu o niczym mógłbyś myśleć.

Na przykład możesz odwiedzić powyższy link.

Plusy:

  • Reprezentuje prawie wszystko co mogłoby rzucić na niego, w tym timespans. (Czyli 3 dni, 2 godziny).

Wady:

  • Umm ... nie wiem właściwie. Inne niż może to może zająć trochę przyzwyczajenia? Z pewnością łatwo jest parsować, jeśli nie ma wbudowanych funkcji, które można już przetworzyć.
5

ISO 8601 wydaje się naturalnym wyborem, ale jeśli chcesz, aby analizować je z systemem JavaScript w przeglądarce, trzeba będzie korzystać z biblioteki, bo przeglądarka obsługuje do części JavaScript Date obiekt, który może analizować daty ISO 8601, jest niespójny, nawet w stosunkowo nowych przeglądarkach. Innym problemem z ISO 8601 jest to, że jest to duży, bogaty standard, a biblioteki daty/czasu obsługują tylko jego część, więc będziesz musiał wybrać podzbiór ISO 8601, który będzie używany przez biblioteki, z których korzystasz.

Zamiast tego, reprezentuję razy jako liczbę milisekund od 1970-01-01T00: 00Z. Jest to zrozumiałe dla konstruktora obiektu Date w znacznie starszych przeglądarkach, przynajmniej wracając do IE7 (który jest najstarszym testowałem).

0

Polecam używanie formatu RFC 3339, który jest przyjemny i prosty, a zrozumiałe dla coraz większej liczby języków, bibliotek i narzędzi.

Niestety, RFC 3339, czas epoki Unix i czas milisekundy JavaScript, wciąż nie są całkiem dokładne, ponieważ żaden z nich nie odpowiada sekundom przestępnym! W pewnym momencie wszyscy będziemy musieli ponownie przyjrzeć się reprezentacjom czasu. Może następnym razem możemy z tym skończyć.

0

Przepraszam za komentarz na tak stare pytanie, ale w kolejnych latach pojawiły się kolejne rozwiązania.

Reprezentowanie informacji o dacie i/lub czasie w JSON jest szczególnym przypadkiem bardziej ogólnego problemu reprezentowania złożonych typów i złożonych struktur danych w JSON. Częścią tego, co sprawia, że ​​problem jest podchwytliwy, jest to, że jeśli reprezentujesz złożone typy, takie jak znaczniki czasu jako obiekty JSON, musisz mieć sposób na wyrażenie tablic asocjacyjnych i obiektów, które zdają się wyglądać jak reprezentacja obiektu JSON znacznika czasu, tak jak niektóre inne zaznaczony obiekt.

Google protocol buffers ma JSON mapping, który ma typ znacznika czasu, z określoną semantyką.

MongoDB's BSON ma Extended JSON, który mówi { "$date": "2017-05-17T23:09:14.000000Z" }.

Obie mogą również wyrażać bardziej złożone struktury oprócz datetime.

Powiązane problemy