parse - récupérer données json javascript




Le "bon" format de date JSON (7)

Dans Sharepoint 2013, l'obtention de données dans JSON n'existe pas de format pour convertir la date en format date unique, car cette date doit être au format ISO

yourDate.substring(0,10)

Cela peut vous être utile

J'ai vu tellement de standards différents pour le format de date JSON:

"\"\\/Date(1335205592410)\\/\""         .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\""    .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z"              JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00"             ISO 8601

Lequel est le bon? Ou mieux? Y a-t-il une sorte de norme à ce sujet?


De la RFC 7493 (le format de message I-JSON) :

I-JSON signifie JSON Internet ou Interoperable JSON, selon la personne que vous posez.

Les protocoles contiennent souvent des éléments de données conçus pour contenir des horodatages ou des durées. Il est RECOMMANDÉ que tous ces éléments de données soient exprimés sous forme de chaîne au format ISO 8601, comme spécifié dans la RFC 3339 , avec des restrictions supplémentaires sur l'utilisation de majuscules plutôt que de minuscules, l'inclusion du fuseau horaire être inclus même lorsque leur valeur est "00". Il est également RECOMMANDÉ que tous les éléments de données contenant des durées de temps se conforment à la production de «durée» de l'annexe A de la RFC 3339, avec les mêmes restrictions supplémentaires.


JSON ne sait rien des dates. Qu'est-ce que .NET fait est un hack / extension non standard.

J'utiliserais un format qui peut être facilement converti en un objet Date en JavaScript, c'est-à-dire qui peut être passé à la new Date(...) . Le format le plus facile et probablement le plus portable est l'horodatage contenant des millisecondes depuis 1970.


Je pense que cela dépend vraiment du cas d'utilisation. Dans de nombreux cas, il peut être plus avantageux d'utiliser un modèle objet approprié (au lieu de rendre la date à une chaîne), comme ceci:

{
     "year": 2012,
     "month": 4,
     "day": 23,
     "hour": 18,
     "minute": 25,
     "second": 43,
     "timeZone": "America/New_York"
}

Certes, c'est plus prolixe que le RFC 3339 mais:

  • c'est aussi lisible par l'homme
  • il implémente un modèle objet approprié (comme dans OOP, dans la mesure où JSON le permet)
  • il supporte les fuseaux horaires (pas seulement le décalage UTC à la date et l'heure)
  • il peut supporter des unités plus petites comme des millisecondes, des nanosecondes, ... ou simplement des fractions de secondes
  • il ne nécessite pas d'étape d'analyse séparée (pour analyser la chaîne date-heure), l'analyseur JSON fera tout pour vous
  • création facile avec n'importe quel framework de date-heure ou implémentation dans n'importe quelle langue
  • peut facilement être étendu pour supporter d'autres échelles de calendrier (hébreu, chinois, islamique ...) et d'époques (AD, BC, ...)
  • c'est l'année 10000 sûr ;-) (RFC 3339 ne l'est pas)
  • prend en charge les dates et les heures flottantes ( Date.toJSON() de Javascript)

Je ne pense pas que le tri correct (comme indiqué par funroll pour RFC 3339) est une fonctionnalité qui est vraiment nécessaire lors de la sérialisation d'une date à JSON. Cela n'est vrai que pour les dates ayant le même décalage de fuseau horaire.


Le code suivant a fonctionné pour moi, il va certainement aider quelqu'un (Ce code imprimera la date au format JJ-MM-AAAA ): DateValue = DateValue.substring (6,8) + "-" + DateValue.substring (4,6 ) + "-" + DateValue.substring (0,4);

Sinon, vous pouvez également utiliser:

DateValue = DateValue.substring (0,4) + "-" + DateValue.substring (4,6) + "-" + DateValue.substring (6,8);


c'est travailler pour moi avec le serveur d'analyse

{
    "ContractID": "203-17-DC0101-00003-10011",
    "Supplier":"Sample Co., Ltd",
    "Value":12345.80,
    "Curency":"USD",
    "StartDate": {
                "__type": "Date",
                "iso": "2017-08-22T06:11:00.000Z"
            }
}

Il n'y a pas de bon format . La spécification JSON ne spécifie pas de format pour l'échange de dates, ce qui explique pourquoi il existe de nombreuses façons de le faire.

Le meilleur format est sans doute une date représentée au format ISO 8601 ( voir Wikipedia ); C'est un format bien connu et largement utilisé qui peut être manipulé dans plusieurs langues différentes, ce qui le rend très bien adapté à l'interopérabilité. Si vous avez un contrôle sur le fichier json généré, par exemple, vous fournissez des données à d'autres systèmes au format json, en choisissant 8601 car le format d'échange de dates est un bon choix.

Si vous n'avez pas de contrôle sur le json généré, par exemple, vous êtes le consommateur de json de plusieurs systèmes existants différents, la meilleure façon de gérer cela est d'avoir une fonction d'analyse de date pour gérer les différents formats attendus.





json