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

Langage PHP Discussion :

Récupérer une valeur d'un json


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut Récupérer une valeur d'un json
    Bonjour
    J'utilise joomla (si quelqu'un connait et propose une solution plus adaptée avec le framework joomla 4)
    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo $this->item->jcfields[40]->rawvalue;
    Je récupère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"row0":{"field42":"129","field41":""}}
    Comment récupérer la valeur "129" du champ "field42" ?

    J'y ai passé des heures car je ne suis pas développeur. Je suis arrivé à transformer le json dans quelques chose de peut-être plus facilement manipulable ?
    L'important est d'essayer de traiter le tout si possible sur une ligne afin que j'utilise la valeur récupérée pour générer une url. Voici où j'en suis:
    Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php if (!empty($this->item->jcfields[40]->value)): ; ?> 
     
    		<?php $idStruct=129; $catStruct=16; $Itemid=156; 
    		$req =array(json_decode($this->item->jcfields[40]->rawvalue));
    		var_dump ($req);
    		echo '<br>';
    		$req1 =array(json_decode($this->item->jcfields[40]->rawvalue)->{2});
    		var_dump ($req1);
    		?>
    		<a href="/index.php?option=com_content&view=article&id=<?php echo $idStruct;?>&catid=<?php echo $catStruct;?>&Itemid=<?php echo $Itemid;?>&lang=fr"><?php echo $this->item->jcfields[40]->value; ?></a>
    	<?php endif; ?>
    j'ai le retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array(1) { [0]=> object(stdClass)#3820 (2) { ["row0"]=> object(stdClass)#1906 (2) { ["field42"]=> string(3) "129" ["field41"]=> string(0) "" } ["row1"]=> object(stdClass)#1846 (2) { ["field42"]=> string(3) "121" ["field41"]=> string(0) "" } } }
    array(1) { [0]=> NULL }

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 356
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 356
    Billets dans le blog
    17
    Par défaut
    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $this->item->jcfields[40]->rawvalue;
    Je récupère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"row0":{"field42":"129","field41":""}}
    Comment récupérer la valeur "129" du champ "field42" ?
    Comme ceci :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $json = $this->item->jcfields[40]->rawvalue; // {"row0":{"field42":"129","field41":""}}
    $data = json_decode($json);
    echo $data->row0->field42; // "129"

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    json_decode peut te renvoyer une structure soit sous forme d'objets imbriqués (par défaut):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = json_decode('{"row0":{"field42":"129","field41":""}}');
    echo $data->row0->field42; //129
    soit sous forme de tableaux imbriqués (avec le 2e paramètre à true):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = json_decode('{"row0":{"field42":"129","field41":""}}', true);
    echo $data[row0][field42]; //129
    À toi de voir celle qui te convient le mieux pour appréhender et manipuler la structure de tes données.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Bonjour
    Merci pour vos réponses rapides.
    Bon je pars sur le plus simple.
    Après j'ai un autre souci qui n'est pas forcément résolvable car je dois ensuite récupérer d'autres variables pour construire l'rul
    Car en fait l'objet retourne plusieurs valeurs de field42; 129 puis 121
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array(1) { [0]=> object(stdClass)#3820 (2) { ["row0"]=> object(stdClass)#1906 (2) { ["field42"]=> string(3) "129" ["field41"]=> string(0) "" } ["row1"]=> object(stdClass)#1846 (2) { ["field42"]=> string(3) "121" ["field41"]=> string(0) "" } } }
    array(1) { [0]=> NULL }
    Le HTML attendu serait par exemple
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a) /index.php?option=com_content&view=article&id=129&catid=16&Itemid=156&lang=fr
    b) /index.php?option=com_content&view=article&id=121&catid=15&Itemid=153&lang=fr

    Mon code php actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php if (!empty($this->item->jcfields[40]->value)): ; ?> 
      <br /><br /><h3>... bout de code html
    		<?php
    		$data = json_decode($this->item->jcfields[40]->rawvalue);
    		$idStruct=$data->row0->field42; $catStruct=16; $Itemid=156;		
    		?>
    		<a href="/index.php?option=com_content&view=article&id=<?php echo $idStruct;?>&catid=<?php echo $catStruct;?>&Itemid=<?php echo $Itemid;?>&lang=fr"><?php echo $this->item->jcfields[40]->value; ?></a>
    	<?php endif; ?>

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 703
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 703
    Par défaut
    Citation Envoyé par herveD Voir le message
    Car en fait l'objet retourne plusieurs valeurs de field42
    quel objet ? avec quel code ?

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 356
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 356
    Billets dans le blog
    17
    Par défaut
    Car en fait l'objet retourne plusieurs valeurs de field42; 129 puis 121
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [0]=> object(stdClass)#3820 (2) { ["row0"]=> object(stdClass)#1906 (2) { ["field42"]=> string(3) "129" ["field41"]=> string(0) "" } ["row1"]=> object(stdClass)#1846 (2) { ["field42"]=> string(3) "121" ["field41"]=> string(0) "" } } }
    Je reformule selon ton exemple : le JSON est un objet contenant (1,n) objets dont tu veux récupérer la propriété "field42".

    Utilise le paramètre optionnel json_decode() "associative" à true dont on a déjà parlé plus haut.
    => Tu obtiendras un tableau associatif au lieu d'un objet
    => Avec ce tableau tu pourras plus facilement boucler sur tes données

    https://www.php.net/json-decode

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Rebonjour
    Oui désolé 1 seul objet
    Après cela ne fonctionne pas, car en fait je n'ai pas été suffisamment clair, mais je pense qu'il faut une boucle sur le nombre de row. Il peut y avoir 1 seul url ou x urls
    Quelque chose du genre
    De la 1ère valeur row0 à la dernière rowX
    affichage de l'url (x)
    Fin de l'affichage des urls

Discussions similaires

  1. [Delphi XE] JSON - ISuperObject Récupérer une valeur
    Par lerorodu51 dans le forum Débuter
    Réponses: 7
    Dernier message: 30/07/2018, 10h50
  2. Récupérer une valeur dans un tableau de tableau de JSON
    Par ecnerrolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/06/2014, 11h03
  3. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 01h32
  4. Réponses: 2
    Dernier message: 17/06/2005, 14h38
  5. Réponses: 2
    Dernier message: 11/12/2004, 22h20

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