0
votes

Angulaire 8 moyen de convertir la réponse JSON avec des dates de chaîne en date JS?

Je sais que JSON ne traite pas les dates de manière particulière et leur fournit des chaînes du serveur. Existe-t-il un moyen de fournir une réponse d'objet JSON qui possède une propriété de date ISO et de la carte à une classe déjà avec la propriété de date mappée en tant que date JS?

Exemple:

Réponse JSON: xxx

et j'ai cette classe: xxx

ma méthode de service: xxx

Mais lorsque je l'utilise dans ma composanteDaate de naissance et mon souscriptionDate sont toujours traités comme des chaînes. Y a-t-il de toute façon le transformer en js dates sans avoir à formater la date dans chaque demande en itérant la réponse JSON et en modifiant l'objet?


0 commentaires

3 Réponses :


1
votes

La réponse courte est non comme le format JSON n'autorise pas les types de date. Voir ceci: https://www.w3schools.com/js/js_json_daTatypes.asp

Je ne pense pas que vous ayez un autre choix que de les transformer en objets de date et, en plus, c'est relativement trivial au format de votre date de chaîne: P>

ndate = new Date("1986-05-04T22:59:59.000Z")


4 commentaires

Le problème n'est pas de convertir la chaîne en une date mais de le faire pour plusieurs champs et classes manuellement.


Alors qu'essayez-vous d'atteindre? "Est-il de toute façon pour le transformer en js dates sans avoir à formater la date dans chaque demande en itérant la réponse JSON et en modifiant l'objet?" Vous demandez si vous pouvez transformer le champ JSON en un objet de date JS sans avoir à formater la date et la réponse est non. Les types de données JSON n'autorisent pas les objets de date conformément au lien ci-dessus.


Je pense que Angular a des mécanismes tels que les intercepteurs HTTP pouvant intercepter une réponse et modifier des données. C'est ce dont j'ai besoin.


Pourquoi voudriez-vous utiliser un intercepteur HTTP pour modifier les données? Ne semble pas comme une meilleure pratique angulaire pour moi. Bien mieux de créer un service situé entre votre composant et votre service API, ainsi que la carte / transformer les données.



0
votes

JSON ne fournit aucun support particulier à la date. Vous devez le convertir manuellement. Comme suit:

nouvelle date ("1986-05-04T22: 59: 59.000z"); code> p> blockQquote>

convertir l'objet JSON en un objet JavaScript peut vous aider à réaliser ce dont vous avez besoin. p>

Vérifiez cette fonction: P>

function convertJsonIntoJavaScript(data){
let newObj = new Object();
   Object.keys(data).forEach(x=> {
   let d = new Date(data[x]);
   newObj[x]= (d instanceof Date && !isNaN(d))? d: data[x];
});
return newObj;
}


2 commentaires

Le problème n'est pas de convertir la chaîne en une date mais de le faire pour plusieurs champs et classes manuellement.


@Philippegioseffi, il suffit d'ajouter une fonction en réponse. Bien que je ne puisse pas le tester mais je crois que cela devrait fonctionner.



0
votes

Puisque le get va retourner une observable, vous devriez pouvoir faire quelque chose comme ceci:

getUser(id: string): Observable<User> {
  return this.http.get<User>(`${this.UrlService}estabelecimentos/${id}`, { headers: this.authenticationService.jwt() })pipe(
    map(response => {
      return {
        "data": {
          "id": response.id,
          "name": response.name,
          "surname": response.surname,
          "birthDate": new Date(response.birthDate)
          "subscriptionDate": new Date(response.subscriptionDate)
      }
    }),
    catchError(()=> super.serviceError)
  )
}


0 commentaires