Pourquoi ne JSON.stringify vis de mon objet datetime?
{ id: 1533,
story_type_id: 1,
content_id: 470,
created_at: Sun, 05 Feb 2012 07:02:43 GMT,
updated_at: Sun, 05 Feb 2012 07:02:43 GMT,
type_name: 'post' }
J'ai un objet JSON avec le "datetime" champ comme ci-dessus. C'est l'idéal. Mais quand je stringify (je veux le stocker dans le cache), j'obtiens ce format:
"created_at":"2012-02-05T07:02:43.000Z"
Cela pose des problèmes, parce que quand je veux JSON.analyser ce, tout à coup, il n'est plus dans le format datetime et c'est incompatible avec mon autre format.
Que puis-je faire pour résoudre ce problème? J'ai des "created_at' jonché partout tout au long de ma demande. Je ne veux pas changer manuellement chaque.
Je présume que vous êtes serialising ces dates pour les stocker dans le localStorage. Dans ce cas, vous pouvez éviter d'aggro comme similaires en utilisant une bibliothèque d'encapsulation comme rhaboo.
OriginalL'auteur TIMEX | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de façon particulière de le sérialiser
Date
objets JSON. C'est pourquoi vous obtenez la normalisation de la représentation sous forme de chaîne. Vous avez besoin de les convertir retour àDate
objets en les passant à laDate
constructeur.Mise à jour: Avec la
reviver
fonction (voir les commentaires), vous pouvez obtenir leDate
objets.Non, je ne le pense pas. Vous devez les stocker d'une autre manière.
Le
Date
objet est originaire de JavaScript, mais JSON est un mécanisme de sérialisation utilisés pour le transport de données entre plates-formes. Si elle a permis à la sérialisation des objets natifs et de fonctions, les systèmes qui transmettent JSON de JS, par exemple, PHP allait se briser. Vous voudrez peut-être chercher dans le JSONreviver
méthodologies.que faire si je le conserver comme ça, mais au cours de la récupération, je itérer sur chaque clé et vérifier si c'est une date. Si oui, appliquer new Date ()? stackoverflow.com/questions/9194576/...
Oh, à droite. J'ai totalement oublié le
reviver
fonction.OriginalL'auteur J. K.
Effectivement, il est possible de modifier la façon dont un objet Date sera sérialisé en JSON. Combiné avec la fonction reviver, un bi-directionnelle de la solution peut être créé automatiquement sur la sérialisation et peut être facilement utilisé sur la désérialisation.
Tout d'abord modifier la sérialisation comme ceci:
Cela va changer la représentation d'un objet Date en timestamp UNIX avec un préfixe comme un marqueur:
Ensuite, vous pouvez créer une fonction reviver qui filtrera automatiquement ces valeurs:
(Crédit: Ce code a été essentiellement copié à partir de cette réponse à une question connexe: https://stackoverflow.com/a/14509447/2572897)
Maintenant, avec cette configuration, la désérialisation de notre résultat avant résultat sera une Date objet:
Ou vous pouvez choisir de ne pas modifier la sérialisation, mais plutôt utiliser les regexp pour attraper le standard de format de sérialisation:
Exemple:
OriginalL'auteur Juliane Holzt
Date.le prototype.la méthode toJSON = function() { return moment(ce).format('L'); }
Vous pouvez en lire plus à propos de moment de documentation et d'adapter le type de date que vous souhaitez retourner.
OriginalL'auteur Navid Golforoushan
https://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates
OriginalL'auteur Majid joghataey