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

Symfony PHP Discussion :

[JSON] [REST] [CURL] convertir réponse restful to object [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Points : 11
    Points
    11
    Par défaut [JSON] [REST] [CURL] convertir réponse restful to object
    Bonjour,
    Il y a il un moyen de convertir une réponse restful(XML soit elle,JSON ou autre) en un objet selon une classe définie?

    d'une autre manière , il y a il un moyen de convertir un flux XML comprenant des objets avec leurs attributs en classe?

    Dernière question,est il possible de convertir un xmlString en un objet?

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Question 1)
    Tu veux que ton application récupère des données depuis une autre application sous forme d'un JSON et les transforme en objet ? Je dirais même qu'il serait souhaitable que ce soit cet objet qui fasse la récupération, vois à créer un objet parent avec les méthode de connexion et des objets enfants spécialisés pour récupérer des informations particulières.

    Question : tu entends quoi par : "un objet selon une classe définie ?"


    Question 2)
    Par contre, pour l'accès au xml, c'est moins évident. Il semblerait qu'il n'y ai plus de plugin et pas d'accès simple.
    Par contre, il y a des fonctions maintenant dans les versions >5.1.2 qui permettent de lire des xml XMLReader Il devrait être possible de lire ton XML et de remplir un objet adapté, voir de créer une arborescence comme pour la question
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ca dépendra de la réponse mais y'a json_decode, pour REST ca dependra du framework utiliser

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Points : 11
    Points
    11
    Par défaut
    Oui mais Json_decode me retournerai une stdclass.
    moi je veux récupérer un objet d'une classe que j'ai déclaré.
    Apparament, en PHP, on ne peut pas faire un script générique pour convertir
    une réponse d'un web service à un objet (à part SimpleXMlElement et stdclass)
    si quelqu'un à une astuce ! je suis preneur

  5. #5
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Par
    moi je veux récupérer un objet d'une classe que j'ai déclaré
    tu entends quoi ?
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Points : 11
    Points
    11
    Par défaut
    Exemple
    si j'ai comme réponse Json:
    String(486){"id":"1","nom":"Test","prenom":"Test,City{"id":"1","GpsPosition":"1.25055"}}

    cette réponse je pourrai la convertir en une stdClass.
    moi j'ai fait une classe PHP appelé Account qui contient ($id,$nom,$prenom,$city) sachant que j'ai déja déclaré City comme classe aussi et je veux convertir cette réponse à un objet Account.

    Le casting je ne pense pas qu'il est réalisable en PHP non?(si oui je pourrai faire un casting sur la stdClass pour en tirer un Account, mais je ne pense pas que c'est faisable)

    c'etais un example, j'ai plusieurs classe, do,c je veux faire une fonction générique pour faire se travail.

    car sinon, je dois parser la stdclass pour en créér l'objet à chaque fois(j'ai besoin des getter et setter de ses objets)

    Merci

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Points : 11
    Points
    11
    Par défaut
    c'est réglé!
    tout d'abords il faut faire des getter et des setter générique dans les classes:
    function __get($name) {

    if (($return_value = property_exists($this, $name)) === TRUE) $return_value = $this->{$name};
    return $return_value;
    }

    function __set($name, $value) {

    if (($return_value = property_exists($this, $name)) === TRUE) $this->{$name} = $value;
    return $return_value;
    }


    Puis j'ai utilisé curl pour les appel rest.c'est très simple enfaite.

    Ensuite j'ai coder le retour de la réponse ($response par exemple) en un tableau json:
    $json_array = json_decode($response, true); //true pour avoir un tableau à la place d'un objet stdClass.


    Puis j'ai fait un script de cette manière:

    public function jsonToObject($jsonArray, $obj)// $obj instance d'une classe

    {
    foreach($jsonArray as $attribute => $value)
    {
    $obj->__set($attribute, $value);
    }
    return $obj;
    }
    et voila, notre objet est crée à partir d'une réponse Rest JSON.
    très simple a mettre en oeuvre, mais pas pour un newbie en php comme moi.

    Merci pour toute l'aide.

    NB: le nom des attributs des méthodes dans se cas doit être le même que celui de la réponse rest, c'est à dire le nom des attributs des classes distantes et des classes php sont les mêmes.

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Jolie solution.

    La mienne aurait été un peu plus compliquée, mais, grosso modo suivant le même principe.

    A garder comme référence.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Convertir String to combobox object
    Par eemii dans le forum C#
    Réponses: 7
    Dernier message: 08/10/2013, 18h24
  2. [JSON] Paramètre Service Web JAX-REST exception
    Par Cédric B. dans le forum Services Web
    Réponses: 1
    Dernier message: 10/06/2013, 10h33
  3. [XHTML] XHTML Strict + iFrame/Object + IE et le Reste du Monde
    Par Prosis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/01/2010, 17h39
  4. Convertir un String en Object
    Par TrollTop dans le forum VC++ .NET
    Réponses: 6
    Dernier message: 17/10/2007, 15h25
  5. Envoi d'une réponse XML REST par un serveur Linux
    Par MayaLeChat dans le forum REST
    Réponses: 6
    Dernier message: 08/03/2006, 14h29

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