2010-11-25 3 views
2

J'ai un objet JSON qui peut stocker une Date (et/ou tout autre objet JS) mais je ne suis pas sûr de savoir comment l'extraire une fois dedans. Par exemple, j'ai cet exemple de code, mais il ne fonctionne pas:Obtenir la date et/ou la vérifier dans l'objet JSON?

for(var key in value){ 
    if(value.hasOwnProperty(key)){ 
     if(typeof value[key] == 'object'){ 
      if(value[key].Date){ 
       console.log('this is a date') 
      } 
      else{ 
       console.log('not a date'); 
      } 
     } 
    } 
} 

Cependant, il ne cesse revenir not a date. Si j'inspecte l'objet JSON avec Firebug ou la Developer Console dans WebKit, je vois __proto__: Date dans l'élément JSON correspondant ... alors, comment puis-je le sortir ou le vérifier?

--EDIT--

Voici ce que je vois dans le débogueur:

Object 
->isADate: Fri Nov 26 2010 20:30:57 GMT-0800 (Pacific Standard Time) 
--->__proto__: Date 
->notADate: "some string" 
--->__proto__: Object 

Et voici la création im JSON:

var dateStorage = new storageLocker('date-test'); 
dateStorage.save({'isADate':new Date(),'notADate':'some string'}); 

Voici le code pour cette une partie de mon script (http://github.com/oscargodson/storagelocker)

storageLocker.prototype.save = function(value){ 
var json = JSON.parse(localStorage.getItem(this.catalog)); 
if(json == null){json = {};} 
for(var key in value){ 
    if(value.hasOwnProperty(key)){ 
     json[key] = value[key]; 
     console.log(value[key].Date); 
     if(typeof value[key] == 'object'){ 
      if(value[key].Date){ 
       console.log('this is a date') 
      } 
      else{ 
       console.log('not a date'); 
      } 
     } 
    } 
} 
localStorage.setItem(this.catalog,JSON.stringify(json)); 
return this; 
} 

Merci beaucoup! J'espère que cela aide plus!

+0

S'il vous plaît fournir un extrait de JSON afin que nous puissions être sûr qu'il est vraiment valable JSON, et que le comportement que vous voyez est pas en raison des outils de débogage ravivant des objets pour vous automatiquement. – haylem

Répondre

2

Vous voulez regarder ceci: How to know if an object is a date or not with JavaScript

Fondamentalement, le « plus sûr » - pas à 100%, mais failsafe vous devriez être bien - est de faire la détection de caractéristiques. Toutefois, assurez-vous que votre entrée JSON est vraiment un objet date et non une chaîne, auquel cas cela ne fonctionnera pas et vous devrez utiliser le new Date() ou Date.parse() pour en faire un objet date.

EDIT: Après vos 2 commentaires:

JSON ne vous permet pas de stocker des objets dans un format de date. Donc, il y a déjà une divergence ici. Soit vous ne traitez pas vraiment d'objets JSON, soit vous ne les traitez pas comme ils devraient l'être. Voir cette page pour la documentation officielle sur l'utilisation JSON in JavaScript pour plus d'informations sur l'utilisation du paramètre reviver de JSON.parse, car une date doit être stockée sous forme de chaîne, puis "relancée" dans un objet Date.

également, que les rendements typeof objet ne signifie pas nécessairement que vous ne traitez pas une chaîne, par exemple:

typeof new String("test") // object 

Maintenant, en supposant que vous avez vraiment un objet Date à ce stade, je ne Ne voyez pas comment tester pour value[key].Date fonctionnerait de toute façon. Essayez dans votre console de débogage, comme vous avez Firebug:

var t = new Date(); 
alert(t.Date)       // undefined 
alert(t.getMonth)      // code of the function, so not undefined 
alert(typeof t.getMonth != 'undefined') // true 

Donc, en utilisant une combinaison de tests pour getMonth, getDay et d'autres feraient l'affaire.

+0

Hmm Je ne sais pas si je comprends ou si vous vous méprenez ... Je sais comment faire la détection des caractéristiques et je sais que c'est une date parce qu'elle est mise dans le JSON comme nouvelle date() mais quand je n'arrive pas à choisir il via la syntaxe JSON. Tout ce que j'ai essayé retourne indéfini ... Espérons que cela a plus de sens? –

+0

En bref, je sais que c'est une date, je sais que c'est supporté, ET c'est un objet utilisant typeof et je peux le voir avec les inspecteurs web Je ne peux pas trouver la syntaxe pour sélectionner la date ... –

+0

@Oscar Godson: voir s'il vous plaît ma rédaction. Et veuillez fournir un extrait JSON. – haylem

0

Si, comme moi, que tu arrives à la recherche d'un moyen de découvrir quelle date/heure une valeur de date JSon égale, vous pouvez le faire comme suit (en utilisant wscript - l'hôte de script Windows):

  1. enregistrez le texte suivant dans un fichier appelé test.js (remplacez 1396566000000 par votre propre valeur de date)

    var date = new Date (1396566000000); WScript.Echo (date);

  2. à partir d'une invite de commande, exécutez:

    wscript test.js