IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Exploitation d'une String JSON reçue d'un WebService


Sujet :

AngularJS

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Exploitation d'une String JSON reçue d'un WebService
    Bonjour,

    Je reçois d'un Web Service une String en JSON. Cette string est en fait un dataset Serializé en JSON. Ce data cette décris ma BDD.

    La string en JSON cette tete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"Nom de ma requete":"{\"Table\":[{Champ-1-instance1\":value_de_type_int,\"Champ2":\"Value-de-type-string"} {Champ-1-instance2\":value_de_type_int,\"Champ2":\"Value-de-type-string"}]}
    les \ sont surment du à l'interpretation du navigateur car avec un plugin spécifique JSON ils n’apparaissent pas. Mais ce n'est pas ma question.

    la première chose que j'ai faite est de le mettre dans une variable pour la convertir en Objet AngularJS comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var resultat= angular.toJson(stringJson);
    Une fois celà fait j'aimerais pouvoir acceder au value de mes champ-1 et champ 2
    je n'ai aucune idée de comment faire vue que Table est un objet JSON lui meme placé dans un objet JSON je suppose ensuite que pour parcourir toute les instances de table il va me falloir une boucle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var resultat= angular.toJson(stringJson);
    est -il la bonne méthode?

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Ce json, même en tenant compte du fait qu'il est incomplet, est complètement invalide. Tu pourrais poster le véritable fichier et non un morceau pour en avoir le coeur net ?

    Ca ce n'est pas du json :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{Champ-1-instance1\":value_de_type_int
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour Marco46

    Malheureusement non je ne peux pas poster le fichier complet. Pour plusieurs raisons mais entre autres pour des soucis de confidentialitées.
    La synthaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"nom-de-methode":"{\"Table\":[{\"lId\":296,\"DataType\":\"String\",\"champ3\":null,\"champ4\":0},{\"lId\":296,\"DataType\":\"String\",\"champ3\":null,\"champ4\":0}]}"}
    Ceci m'est fourni par un WebService en VB.net qui serialise en JSON un dataSet (sous forme de string) je lui demande ensuite de m'envoyer le résultat en JSON.

    Du coup je pense (j'espère^^) que la synthaxe est correcte, mais j'ai plusieurs soucis:

    1.) selon si je l'ouvre dans un plugin spécifique (dans un navigateur ) ou dans le navigateur directement (IE Chrome FF) les \ apparaissent ou pas (ils sont présent dans le navigateur mais pas dans le plugin). Pensant qu'il s'agissait d'un problème dans ma sérialisation j'avais fait dans mon web service la string en JSON généré et je l'avais "corriger" avec .Replace("\","") mais sa n'a rien changer.

    2.) je ne sais pas comment en Angulars JS accéder au valeur de lId et DataType de {\"lId\":296,\"DataType\":\"String\",\"champ3\":null,\"champ4\":0} et {\"lId\":296,\"DataType\":\"String\",\"champ3\":null,\"champ4\":0}]}

    3.) si il existe une erreur dans ma string comment la corriger avec Angulars?

    Sa fait beaucoup de question, certaine basique certainement mais je suis débutant et un perdu...
    Merci Beaucoup

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, le format d'un objet JSON attendu par AngularJs est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"nom":"Dupuis","prenom":"Enrico"}
    Dans le cas de nombres, généralement c'est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"nom":"Dupuis","note":12,"age":26}
    Ou alors, si tu as plusieurs objets, faut créer un tableau d'objets JSon comme ça(C'est ce que retourne souvent une requête $http, c'est le plus simple à lister avec un ng-repeat) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [
    {"nom":"Dupuis","prenom":"Enrico"},
    {"nom":"Hammed","prenom":"Mohammed"}
    ]
    Il faut donc que tu trouves un moyen de le générer comme ça.

    Note : Tu peux aussi insérer un tableau dans un objet JSON comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"nom":"Dupuis","prenom":"Enrico","scores":[0,3,8]}
    Tu peux aussi injecter des variables dans un json comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var email = "jojo@jo.fr";
     
    $scope.monObjet = { "nom":"Dupuis","prenom":"Henri","email":email};
    Mon avis par rapport à ton Json, c'est qu'il faudrait mieux séparer les champs comme dans l'exemple 1 que j'ai donné, là je vois pas trop l'intérêt de créer un tel objet JSON, mais bon surement que tu dois l'interpréter ?.

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par devwebsympa Voir le message
    Bonjour, le format d'un objet JSON attendu par AngularJs est :
    ...
    Non rien à voir avec AngularJS la string JSON doit respecter les règles du format JSON.
    quant à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"nom-de-methode":"{\"Table\":[{\"lId\":296,\"DataType\":\"String\",\"champ3\":null,\"champ4\":0},{\"lId\":296,\"DataType\":\"String\",\"champ3\":null,\"champ4\":0}]}"}
    c'est dû à une incompréhension de JSON côté serveur

    nous avons là un objet JSON avec un seul champs de type String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"nom-de-methode":"...."}
    Or je suppose que le besoin est un objet JSON avec un champ de type object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
      "nom-de-methode":{
        "Table":[
          {"lId":296,"DataType":"String","champ3":null,"champ4":0},
          {"lId":296,"DataType":"String","champ3":null,"champ4":0}
        ]
      }
    }
    la génération de cette chaine JSON n'est pas correct.
    ça resemble à quelque chose généré comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var table = [];
    table[0] = {"lId":296,"DataType":"String","champ3":null,"champ4":0};
    table[1] = {"lId":296,"DataType":"String","champ3":null,"champ4":0};
    var result = {
    "nom-de-methode" : JSON.stringify(table)
    }
     
    return JSON.stringify(result);
    l'erreur et d'affecter au membre "nom-de-methode" un chaine JSON et non un objet.

    du coup tu as fait un JSON.stringify(JSON.stringify(table)) de façon implicite.
    ce qui explique les \"

    il faut faire quelque chose d'équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var table = [];
    table[0] = {"lId":296,"DataType":"String","champ3":null,"champ4":0};
    table[1] = {"lId":296,"DataType":"String","champ3":null,"champ4":0};
    var result = {
    "nom-de-methode" : table // et non JSON.stringify(table);
    }
     
    return JSON.stringify(result);
    A+JYT

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai essayé ce premier essai dans AngularJs en mettant des simples quotes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $scope.test = {"nom-de-methode":'{"Table":[{"lId":296,"DataType":"String","champ3":null,"champ4":0},{"lId":296,"DataType":"String","champ3":null,"champ4":0}]}'}
    Ou avec l'indentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {"nom-de-methode":'
    	{"Table":
    		[
    			{"lId":296,"DataType":"String","champ3":null,"champ4":0},
    			{"lId":296,"DataType":"String","champ3":null,"champ4":0}
    		]
    	}
    '}
    Par contre, je n'arrive pas à obtenir les vars dans ma vue , j'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span ng-repeat="x in test.Table">{{x.DataType}}</span>
    Mais cela ne fonctionne pas, j'essaye encore un peu...

    EDIT : Mince le truc des simples quotes ne marche pas, le modèle de données n'est plus correctement interprété.

    Essai 2:

    Avec ça (J'ai carrément supprimé 2 doubles quotes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $scope.test = {"nom-de-methode":{"Table":[{"lId":296,"DataType":"String","champ3":null,"champ4":0},{"lId":296,"DataType":"String","champ3":null,"champ4":0}]}}
    Je tente ça dans ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<span ng-repeat="x in test.nom-de-methode.Table">{{x.DataType}}</span>
    ça marche toujours pas, je sêche là !
    Dernière modification par Invité ; 03/04/2016 à 12h58.

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par devwebsympa Voir le message
    J'ai essayé dans ANgularJs en mettant des simples quotes
    ça marche toujours pas je sêche là !
    il ne faut pas de quote du tout
    je pensais avoir été clair

    A+JYT

  8. #8
    Invité
    Invité(e)
    Par défaut
    Mince excuse moi

    Bon alors du coup, j'ai compris... Lorsque son modèle de données sera bien formé, il pourra itérer comme cela (Je l'ai testé, ça marche bien) pour voir tous les DataType de son modèle de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    test ={"nomdemethode":{"Table":[{"lId":296,"DataType":"String","champ3":null,"champ4":0},{"lId":296,"DataType":"String","champ3":null,"champ4":0}]}}
     
     for (x=0;x<test.nomdemethode.Table.length;x++){
    	console.log(test.nomdemethode.Table[x].DataType);
    }
    Attention : J'ai remarqué que le nom nom-de-methode fait planter la boucle ! J'ai du la changer en nomdemethode !


    Et j'ai testé ça avec succès dans Angular JS :

    1. Dans le controleur ANGULAR JS, écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $scope.test ={"nomdemethode":{"Table":[{"lId":296,"DataType":"String","champ3":null,"champ4":0},{"lId":296,"DataType":"String","champ3":null,"champ4":0}]}}
    2. Et dans la vue HTML, écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<span ng-repeat="x in test.nomdemethode.Table">{{x.lId}} {{x.DataType}} {{champ3}} {{champ4}}</span>
    3. Dans la vue HTML s'affiche alors :
    Dernière modification par NoSmoking ; 03/04/2016 à 14h19. Motif: Inutile de citer un message pour y répondre, ilexiste un bouton répondre à la discussion.

  9. #9
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par devwebsympa Voir le message
    Je tente ça dans ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<span ng-repeat="x in test.nom-de-methode.Table">{{x.DataType}}</span>
    ça marche toujours pas, je sêche là !
    là il s'agit d'une bonne pratique à appliquer.
    Citation Envoyé par bonne partique
    NE JAMAIS UTILISER DE NOM DE CHAMPS AVEC DES CARACTERES NON ALPHABETIQUE OU ACCENTS.
    ouvrir la console et tapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >test = {"truc-machin":14}
    >console.log(test.truc-machin)
    Uncaught ReferenceError: machin is not defined()
    la bonne pratique est d'utiliser la notation camelCase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >test = {"trucMachin":14}
    >test.trucMachin)
    14
    l'autre solution mais pas cool avec AngularJS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >test = {"truc-machin":14}
    >console.log(test['truc-machin'])
    14
    cette syntaxe est une sous traction test.truc - machin
    A+JYT

  10. #10
    Invité
    Invité(e)
    Par défaut
    Tout à fait sekaijin, merci beaucoup !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour sekaijin et devwebsympa

    Tout d'abord un grand merci à vous 2 pour vos réponses très riches.

    Tout d'abord, Sekaijin tu me dis que la présence de \ est du à la mise en format String de mon JSON. Pour l'obtenir j'utilise dans mon Web service la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SerializedObject(monXml)
    de JSON.Net or cette méthode me renvois obligatoirement une String JSON (http://www.newtonsoft.com/json/help/...sonConvert.htm). Mais la convertion dans AngularJS me permet de récupérer une forme correcte.

    Devwebsympa, Effectivement je dois l'interprété pour générer un tableau avec. Mais les éléments de réponses que tu m'as apporté vont fortement m'y aider.

  12. #12
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par Cludo Voir le message
    Tout d'abord, Sekaijin tu me dis que la présence de \ est du à la mise en format String de mon JSON. Pour l'obtenir j'utilise dans mon Web service la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SerializedObject(monXml)
    de JSON.Net or cette méthode me renvois obligatoirement une String JSON (http://www.newtonsoft.com/json/help/...sonConvert.htm). Mais la convertion dans AngularJS me permet de récupérer une forme correcte.
    non ce que je dis c'est que le membre "nom-de-methode" est affecté avec une valeur qui est déjà une sérialisation JSON
    un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Product product = new Product();
     
     product.Name = "Apple";
     product.ExpiryDate = new DateTime(2008, 12, 28);
     product.Price = 3.99M;
     product.Sizes =  JsonConvert.SerializeObject(new string[] { "Small", "Medium", "Large" });
    // ERREUR ICI ----------+
     
     string output = JsonConvert.SerializeObject(product);
     //{
     //  "Name": "Apple",
     //  "ExpiryDate": "2008-12-28T00:00:00",
     //  "Price": 3.99,
     //  "Sizes": "\[
     //    \"Small\",
     //    \"Medium\",
     //    \"Large\"
     //  \]"
     //}
    Alors qu'il faut affecter un objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Product product = new Product();
     
    product.Name = "Apple";
    product.ExpiryDate = new DateTime(2008, 12, 28);
    product.Price = 3.99M;
    product.Sizes = new string[] { "Small", "Medium", "Large" };
     
    string output = JsonConvert.SerializeObject(product);
    //{
    //  "Name": "Apple",
    //  "ExpiryDate": "2008-12-28T00:00:00",
    //  "Price": 3.99,
    //  "Sizes": [
    //    "Small",
    //    "Medium",
    //    "Large"
    //  ]
    //}
    A+JYT

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2008, 14h47
  2. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04
  3. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30
  4. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo