0
votes

Comment modifier les données retournées par JSON?

J'utilise l'API OMDB (DB en ligne DB). J'ai créé une interface qui renvoie les types de données attendus. Lors de la demande de données via la méthode HTTP GET, les données renvoyées sont: {Recherche: Array (10), TotalResults: "31", réponse: "vrai"}. Les données que j'ai besoin sont dans le tableau de recherche. Lors de l'abonnement, j'utilise res.Search pour accéder à ces informations: S'abonner (((res) => {res = this.movieresults = res.Search; Cependant, l'erreur indique que la recherche n'existe pas sur mon interface. Comment puis-je résoudre ce problème s'il vous plaît?

/ * Mon interface * / P>

/* GET request*/
  getData(event) {
    const film = event.target.value;
    this.data.searchFilm(film)
    .subscribe( (res) => {
      /** Sort out res.Search issue */
      res = this.movieResults = res.Search;
      console.log(res);
    });
  }


0 commentaires

4 Réponses :


0
votes

Parce que votre wearchInterface contient une clé xxx

mais vos données contiennent la clé xxx

vous pouvez faire une chose comme - xxx

et xxx


0 commentaires

1
votes

Il existe deux structures de données impliquées ici: l'externe, renvoyée par le service HTTP, que vous avez décrite dans votre question: xxx

et celui que vous vous souciez que pour chaque Elément du tableau de recherche: SearchInterface.

Votre service ne transforme pas la réponse que vous obtenez du serveur. Donc, son type de retour ne peut donc pas être observable : le serveur renvoie un réticalResponse , il devrait donc être observable .

Mais un meilleur design, puisque vous ne vous souciez pas des autres parties de la réponse réelle, seriez-vous de transformer la réponse réelle sur ce que vous vous souciez réellement de: un tableau Array < / code>. Vous pouvez faire cela à l'aide de la carte carte : xxx


0 commentaires

0
votes

@ amitk88 Pourquoi exportez-vous deux fois de recherche Exporter Interface SearchInterface Exporter Par défaut SearchInterface;

Ne pas attribuer une variable comme celle-ci res = this.movieresults = res.Search; xxx

Vérifiez la réponse que vous récupérez. Je ne vois pas la recherche comme une clé de votre interface, mais vous vous attendez à trouver la recherche dans la réponse. Si vous attendez que la recherche soit une clé dans la réponse, incluez-la sous l'interface


1 commentaires

Merci d'avoir souligné ces problèmes, très apprécié :-)



0
votes

Je créais un Stackblitz et nous sommes déjà avec 3 réponses :)

@JB NIZET La réponse est très élégante et c'est ce que je recommanderais aussi. Quoi qu'il en soit, voici ma contribution:

// aléatoire.tservices.ts xxx

// aléatoire.component.ts Xxx

// ramdom.model.ts xxx

et voilã!


1 commentaires

Merci pour votre réponse, très appréciée :-)