none
Problème pour parser un json RRS feed

  • Question

  • Bonjour, 

    j'essaye de faire une fonction recupère un objet json sur un serveur et qui recupère certains de ces elements. 

    J'arrive bien à récuperer l'objet, en effet console.log(resultat.response) affiche bien le texte correspondant au json

    Par contre lorsque je parse l'objet et que j'essaye d'affiche l'objet json, console.log(json) affiche [object Object]

    Savez vous comment faire pour affiche le json une fois parsé et récupérer ces elements?

    Merci

    request: function () {
    WinJS.xhr({
       url: 'http://autocomplete.wunderground.com/aq?query=vienne&format=json',
       responseType: 'json'
    }).done(
       function succes(resultat) {
       if (resultat.status === 200) {
          var json = JSON.parse(resultat.response);
          console.log(resultat.response);
          console.log(json);
       }
       else {
          console.log("erreur");
       }
    }
    );

    mardi 3 décembre 2013 11:59

Réponses

Toutes les réponses

  • Bonjour

    C'est le fonctionnement normal.
    JSON.parse transforme un String dans un objet.
    Pour voir la structure du votre objet vous pouvez utiliser :
    http://www.jsoneditoronline.org/

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse raffi3438 mercredi 4 décembre 2013 11:54
    mercredi 4 décembre 2013 10:14
  • Merci beaucoup
    mercredi 4 décembre 2013 11:54
  • Par contre j'ai une derniere question concernant la fonction WinJS.xhr

    J'ai une classe qui s'appelle Alerte et qui a, en autres, un parametre forecastdays de type Forecastdays. De plus, ma classe Alerte contient une méthode request() qui contient un appel à WinJS.xhr.

    Lorsqu'au début de ma fonction request() j'appelle this.forecastdays cela fonctionne très bien, par contre si je fais this.forecastdays à l'interieur de WinJS.xhr (qui se trouve pourtant dans ma fonction request()), alors ca ne marche plus.

    Savez vous pourquoi? Et savez vous comment faire pour interagir avec forecastdays dans la fonction WinJS.xhr?

    Merci

    (function () { 'use strict'; // Création du namespace WinJS.Namespace.define('Alerte', { // À l'intérieur, nous lui ajoutons une classe Alerte: WinJS.Class.define( // En premier nous définissons la fonction constructeur function (name) { this.name = name;

    }, // Ensuite nous définissons les objets disponibles de l'instance { name: "", forecastdays :new Forecastdays.Forecastdays(),

    request: function () {

    console.log(this.forecastdays.toString());

    WinJS.xhr({ url: 'http://api.wunderground.com/api/5c279e7506b312bc/forecast/q/CA/San_Francisco.json', responseType: 'json' }).done( function succes(resultat) { if (resultat.status === 200) { var json = JSON.parse(resultat.response); try { var newForecastdays = new Forecastdays.Forecastdays(); var longueur = json.forecast.simpleforecast.forecastday.length; for (var i = 0; i < longueur; i++) { var newForecastday = new Forecastday.Forecastday(); newForecastday.temperatureHigh = json.forecast.simpleforecast.forecastday[i].high.celsius; newForecastdays.myForecastdays.push(newForecastday); }

    this.forecastdays = newForecastdays; } catch (err) { console.log("erreur lors de la récupération du serveur"); } } else { console.log("erreur"); } } ); },

    toString: function(){ return this.forecastdays; } } ) }); })();


    mercredi 4 décembre 2013 18:59
  • Pouvez-vous utiliser le debugger pour voir ce qui se passe?

    Quel est le message d'erreur complète?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 5 décembre 2013 06:55
  • Bonjour,

    le message d'erreur est : "Impossible d'obtenir la propriété "forecastdays" d'une référence null ou non défini"

    Comme si en entrant dans le done on oubli l'objet courant, avez vous une idée?

    Merci pour votre aide


    • Modifié raffi3438 jeudi 5 décembre 2013 13:36
    jeudi 5 décembre 2013 13:00
  • J'ai compris votre soucie.

    Je dirais de faire un return newForecastdays ; et les utiliser comme ça.

    Voir aussi ce thread.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 5 décembre 2013 13:54
  • Merci beaucoup,

    J'ai essayé de m'inspirer de votre lien, mais j'ai toujours la même erreur sur this.forecastdays = newForecastdays;

    "Impossible d'obtenir la propriété "forecastdays" d'une référence null ou non défini"

    Est ce que vous pouvez m'indiquer comment devrais je faire dans mon code précédant?

    Merci beaucoup

    (function () {
        'use strict';
    
        // Création du namespace
        WinJS.Namespace.define('Alerte', {
    
            // À l'intérieur, nous lui ajoutons une classe
            Alerte: WinJS.Class.define(
    
              // En premier nous définissons la fonction constructeur
              function (name)
              {
                  this.name = name;
              },
             
    
              // Ensuite nous définissons les objets disponibles de l'instance
              {
                  name: "",
                  forecastdays :new Forecastdays.Forecastdays(),
    
                  request: function () {
                      Alerte.Alerte.getData().then(function (xhr) {
                          var resultat = xhr;
    
                          if (resultat.status === 200) {
                              var json = JSON.parse(resultat.response);
                              try {
                                  var newForecastdays = new Forecastdays.Forecastdays();
                                  var longueur = json.forecast.simpleforecast.forecastday.length;
                                  for (var i = 0; i < longueur; i++) {
                                      var newForecastday = new Forecastday.Forecastday();
                                      newForecastday.temperatureLow = json.forecast.simpleforecast.forecastday[i].low.celsius;
                                                                        newForecastdays.myForecastdays.push(newForecastday);
                                  }
                                  this.forecastdays = newForecastdays;
    
                              }
                              catch (err) {
                                  console.log("erreur lors de la récupération du serveur");
                              }
                          }
                          else {
                              console.log("erreur");
                          }
    
                      },
                      function (err) {
                          console.log("getData err");
                      });
                  },
    
              {
    
                  getData : function () {
                        return WinJS.xhr({
                              url: 'http://api.wunderground.com/api/5c279e7506b312bc/forecast/q/CA/San_Francisco.json',
                        responseType: 'json'
                    })
                  }
    	
              }
            )
           
        });
    })();
    
    
    

    jeudi 5 décembre 2013 19:00
  • Poouvez-vous nous montrer la definition pour Forecastdays.Forecastdays?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 6 décembre 2013 08:35
  • Merci

    (function () {
    
    	'use strict';
    
    	WinJS.Namespace.define('Forecastdays', {
    
    		Forecastdays: WinJS.Class.define(
    
    			function () {
    
    				this.myForecastdays = new Array(11);
    
    			},
    
    		{
    
    			myForecastdays: null,
    
    			toString: function(){
    
    				var res = "";
    
    				for (var i = 0 ; i < this.myForecastdays.length ; i++) {
    
    					if (this.myForecastdays[i] != null)
    
    						res += this.myForecastdays[i] + "\n";
    
    				}
    
    				return res;
    
    			}
    
    		}
    
    	)
    
    });
    
    })();
    

    vendredi 6 décembre 2013 12:54
  • Re Bonjour

    on a utilisé une petite astuce pour corriger les choses :

                  request: function () {
    
    
                      console.log(this.forecastdays.toString());
                      var _self = this;
                      WinJS.xhr({
                          url: 'http://api.wunderground.com/api/5c279e7506b312bc/forecast/q/CA/San_Francisco.json',
                          responseType: 'json'
                      }).done(
                        function succes(resultat) {
                            if (resultat.status === 200) {
                                var json = JSON.parse(resultat.response);
                                try {
                                    var newForecastdays = new Forecastdays.Forecastdays(); var longueur = json.forecast.simpleforecast.forecastday.length;
                                    for (var i = 0; i < longueur; i++) {
                                        var newForecastday = new Forecastdays.Forecastdays();
                                        newForecastday.temperatureHigh = json.forecast.simpleforecast.forecastday[i].high.celsius;
                                        newForecastdays.myForecastdays.push(newForecastday);
                                    }
    
                                    _self.forecastdays = newForecastdays.toString();
                                   // return newForecastdays; //.toString();
                                }
                                catch (err) {
                                    console.log("erreur lors de la récupération du serveur");
                                }
                            }
                            else {
                                console.log("erreur");
                            }
                        }
                      );
                  },
    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera vendredi 6 décembre 2013 13:32
    vendredi 6 décembre 2013 13:31