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ération donnees JSON


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Récupération donnees JSON
    Bonjour à tous,

    Voila j'ai une construction de fichier JSON sur un serveur distant qui se passe correctement avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * FROM tincidents WHERE date_import IS NULL"; 
    $exe = $pdo->query($sql); 
    echo json_encode($exe->fetchAll(PDO:: FETCH_ASSOC),JSON_UNESCAPED_UNICODE);
    Ce code donne le bon résultat à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"id":"61","type":"1","technician":"2","t_group":"3","title":"test prod","description":"test description","nom":"test jerome","tel":"06XXXXXX","user":"","email":"xxxxx@gmail.com","date_create":"2021-02-19 11:36:54"}]
    J'essaye de récupérer le json depuis un script php

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $url = 'http://xx.xx.xx/ww.php?....';
    $json = file_get_contents($url);
    $data = json_decode($json,true);
     
    foreach ($data as $app) {
    	echo $app["id"];
    }

    Le foreach renvoi un warning "invalid argument"

    Du coup j'ai fait un var_dump($data) il renvoi NULL ????? alors que le var_dump($json) renvoi bien les données.

    j'espère avoir été clair dans mon problème

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Si quelque chose c'est mal passé lors du décodage de la chaîne JSON, tu peux éventuellement en savoir plus avec json_last_error_msg().

    Vérifie également que le script distant n'affiche pas d'espaces (ou d'autres caractères "blancs") avant ou après l'affichage du JSON.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Voila ce que me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $json = file_get_contents($url);
    $data = json_decode($json,true);
    $error = json_last_error_msg();
    var_dump($data, $error === JSON_ERROR_UTF8);
    résultat :
    Je n'ai pas de caractère blanc avant ou après.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    $error === JSON_ERROR_UTF8
    Ça ne risque pas de marcher vu que json_last_error_msg() renvoie une chaîne de caractères (autrement dit, il faut l'afficher).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    En effet

    Du coup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $json = file_get_contents($url);
    $data = json_decode($json,true);
    $error = json_last_error_msg();
    var_dump($data, $error);
    renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NULL
    string(12) "Syntax error"
    Cela ne m'aide pas beaucoup plus

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Et tu as testé $data = json_decode(rtrim($json, ','), true); ? Ou cherche une virgule qui traîne en fin de tableau.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $json = file_get_contents($url);
    $data = json_decode(rtrim($json,','),true);
    $error = json_last_error_msg();
    var_dump($data, $error);
    Donne le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NULL
    string(12) "Syntax error"

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    il se peut que la chaîne contient un espace vide au début ( fichier enregistré avec un encodage en UTF8 avec BOM).
    Pour vérifier que t'as un espace vide, essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $json = file_get_contents($url);
     
    $with_bom=strpos(bin2hex($json), 'efbbbf');
    if( $with_bom === 0 )
     echo "Chaîne contenant un espace vide au début(utf8 avec BOM)";
    else
     echo "Chaîne sans espace vide au début(utf8 sans BOM)";

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    En effet avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $json = file_get_contents($url);
     
    $with_bom=strpos(bin2hex($json), 'efbbbf');
    if( $with_bom === 0 )
     echo "Chaîne contenant un espace vide au début(utf8 avec BOM)";
    else
     echo "Chaîne sans espace vide au début(utf8 sans BOM)";
    j'ai bien le message Chaîne contenant un espace vide au début(utf8 avec BOM)
    Du coup comment puis-je le supprimer ?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Enregistre ton fichier PHP en UT8 ( sans BOM) avec ton éditeur de code (Menu Fichier/Enregistrer sous/encodage ou encore Menu préférence ).

    sinon on peut aussi supprimer cet espace invisible en PHP mais c'est pas la bonne pratique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $json = file_get_contents($url);
    //supprimer ut8 BOM
    $json = str_replace("\xEF\xBB\xBF",'',$json); 
    $data = json_decode( $json,true);

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    C'est parfait !
    Merci beaucoup !

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

Discussions similaires

  1. [2.x] Récupération données JSON dans un fichier TWIG
    Par Joyden dans le forum Symfony
    Réponses: 1
    Dernier message: 07/03/2015, 12h53
  2. Récupération en JSON
    Par benmia dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 06/03/2015, 20h32
  3. Récupération de JSON avec l'API de Klout
    Par Eroatlan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/07/2014, 04h55
  4. Récupération structure JSON
    Par Furil dans le forum jQuery
    Réponses: 7
    Dernier message: 04/07/2013, 11h18
  5. Récupération message JSON depuis fichier JS distant sous IE
    Par JBViper dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/11/2009, 11h08

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