Utiliser et manipuler un fichier JSON dans PHP

20
564

Dans ce tutoriel nous allons voir comment manipuler un fichier de données JSON avec un script en PHP. Pour utiliser ou manipuler notre fichier JSON le pré requis sera d’avoir installé un serveur web et PHP. Si vous ne savez pas comment faire, vous pouvez consulter ce tutoriel sur l’installation de WAMP.

Pour ceux qui ne savent pas à quoi correspond exactement un fichier JSON (définition Wikipédia) :

JSON (JavaScript Object Notation) est un format de données textuelles, générique, dérivé de la notation des objets du langage ECMAScript. Il permet de représenter de l’information structurée.

Maintenant, passons aux choses sérieuses, nous allons utiliser le fichier JSON suivant :

{
    "response": {
        "version": "0.9"
        ,"termsofService": "https://www.numelion.com"
        ,"features": {
        "date": "24/09/2013"
        }
    },
    "cotation_bourse": [
        {
        "bourse": {
        "heure": "15",
        "minute": "04"
        },
        "total": {
        "compagnie": "Total", 
        "cotation": "43,15", 
        "tendance": "+ 1,04"},    
        "michelin": {
        "compagnie": "Michelin", 
        "cotation": "82,42", 
        "tendance": "+ 1,20"}
        },
        {
        "bourse": {
        "heure": "09",
        "minute": "04"
        },
        "yahoo": {
        "compagnie": "Yahoo",
        "cotation": "30,26", 
        "tendance": "- 1,06"},
        "google": {
        "compagnie": "Google",
        "cotation": "886,50", 
        "tendance": "- 3,89"}
        }
        ]
}

Je nomme ce fichier cotation_bourse.json. Ce fichier contient les cotations boursières de plusieurs compagnies. Vu comme cela un fichier de données JSON semble plutôt complexe à décortiquer alors qu’en réalité c’est très simple. Pour cela nous allons utiliser deux fonctions de PHP, var_dump et json_decode, cela va nous permettre de connaître la structure de notre fichier JSON puis de faire le script PHP adapté à celui-ci .

Créons un premier script PHP dans un fichier pour découvrir la structure de notre document JSON et lançons le :

<?php
// indiqué le chemin de votre fichier JSON, il peut s'agir d'une URL
$json = file_get_contents("cotation_bourse.json");

var_dump(json_decode($json));
?>

Le résultat qui s’affiche et qui nous présente la structure de notre fichier JSON est le suivant :

Manipuler un fichier JSON
Manipuler un fichier JSON

Maintenant, il devient très simple de le comprendre, la fonction var_dump présente notre fichier sous la forme d’objets, chaque objet peut lui même contenir un objet ou un tableau par exemple. La capture ci-dessous vous présente la composition de notre fichier. Dans notre exemple ci-dessous, si on souhaite accéder à l’objet 3 dans le rectangle vert il faut passer par l’objet 2 lui-même contenu dans l’objet 1.

Utiliser un fichier JSON
Utiliser un fichier JSON

L’objet 3 contient la date du jour, pour la récupérer nous allons utiliser le code adéquat maintenant que nous savons qu’elle est contenue dans la variable date de l’objet 3, cette variable est elle-même contenue dans la variable features de l’objet 2 qui est contenu dans la variable response de l’objet 1. On sait quelle variable contient la donnée grâce au petit décalage en dessous. On peut donc utiliser le code suivant pour récupérer la valeur contenue dans la variable date :

<?php
$json = file_get_contents("cotation_bourse.json");

$parsed_json = json_decode($json);
$date_jour = $parsed_json->{'response'}->{'features'}->{'date'};
?>

J’ai donc utilisé la fonction json_decode qui permet de récupérer une chaîne encodée en JSON et de la convertir en une variable PHP nommé ici parsed_json, cette variable contient notre fichier JSON d’une manière exploitable, ensuite je créer une seconde variable date_jour avec le chemin d’accès à la variable date dans le fichier JSON, celui-ci étant contenu dans la variable $parsed_json. Nous avions vu que pour accéder à date dans l’objet 3, il fallait passer par response dans l’objet 1 et features dans l’objet 2. La date du jour est maintenant contenue dans la variable $date_jour. Pour naviguer dans un fichier JSON il s’agit simplement d’indiquer le bon chemin après avoir analysé la structure.

Voyons maintenant les tableaux dans les objets, sur la capture présentant le résultat de var_dump vous pouvez constater qu’un tableau (array) est présent dans l’objet « cotation_bourse ». En réalité, ils sont deux tableaux, représenté par 0 => et 1=>, 0 est égal au tableau n°1 et 1 au tableau n°2. Comme vous le voyez, chaque tableau contient lui-même des objets qui eux-mêmes auraient pu contenir d’autres objets, ce n’est pas le cas ici par souci de simplicité. L’image ci-dessous vous présente la structure

Comment utiliser JSON dans PHP
Comment utiliser JSON dans PHP

Pour la petite explication, les objets « response » et « cotation_bourse » sont des objets de bases tous les deux, autrement dit les deux sont les premiers objets en contenant d’autres. On le remarque, car ils sont sur la même ligne verticale. Pour accéder à nos tableaux, nous allons reprendre notre code précédent et lui apporter de légères modifications.

<?php
$json = file_get_contents(« cotation_bourse.json »);
$parsed_json = json_decode($json);
$date_jour = $parsed_json->{‘response’}->{‘features’}->{‘date’};
$heure_cac40 = $parsed_json->{‘cotation_bourse’}[0]->{‘bourse’}->{‘heure’};
$minute_cac40 = $parsed_json->{‘cotation_bourse’}[0]->{‘bourse’}->{‘minute’};
$nom_compagnie = $parsed_json->{‘cotation_bourse’}[0]->{‘total’}->{‘compagnie’};
$cotation_total = $parsed_json->{‘cotation_bourse’}[0]->{‘total’}->{‘cotation’};
$tendance_total = $parsed_json->{‘cotation_bourse’}[0]->{‘total’}->{‘tendance’};
?>

Comme vous le constatez le il suffit d’indiquer le numéro du tableau entre crochet derrière l’objet qui contient le tableau, donc cotation_bourse, pour pouvoir y accéder, ici le tableau [0] correspond au premier tableau, je récupère ainsi les informations contenues dans celui-ci de la même manière que pour le premier exemple, en passant d’objets en objet.

Nous pouvons ainsi récupérer les variables et afficher une phrase qui apparaîtra dans le navigateur par exemple avec le code complet :

<?php
$json = file_get_contents("cotation_bourse.json");

var_dump(json_decode($json));

$parsed_json = json_decode($json);
$date_jour = $parsed_json->{'response'}->{'features'}->{'date'};
$heure_cac40 = $parsed_json->{'cotation_bourse'}[0]->{'bourse'}->{'heure'};
$minute_cac40 = $parsed_json->{'cotation_bourse'}[0]->{'bourse'}->{'minute'};
$nom_compagnie = $parsed_json->{'cotation_bourse'}[0]->{'total'}->{'compagnie'};
$cotation_total = $parsed_json->{'cotation_bourse'}[0]->{'total'}->{'cotation'};
$tendance_total = $parsed_json->{'cotation_bourse'}[0]->{'total'}->{'tendance'};

 echo "Le ${date_jour} à ${heure_cac40} h ${minute_cac40}, la cotation de ${nom_compagnie} 
 est de ${cotation_total} et sa tendance de ${tendance_total} %n";
?>

Le résultat sera le suivant :

Traiter fichier JSON
Traiter un fichier JSON

20 Commentaires

  1. Bonjour, et merci pour ce tuto 🙂

    J’ai un petit soucis cependant :s ça marche très bien tant que mon fichier json n’est pas une url, mais à partir du moment où j’essaie avec une url, ça ne fonctionne plus.

    Pourrais-tu stp faire un ajout à ton tuto avec les étapes à réaliser si on souhaite que le fichier json soit récupérer via une url stp ?

    Je t’en remercie par avance 🙂

  2. Et les erreurs renvoyées (sachant que l’url fonctionne très bien lorsque je la colle dans mon navigateur):

    -Warning: file_get_contents(): Unable to find the wrapper "https" – did you forget to enable it when you configured PHP?

    -Warning: file_get_contents(https://www.dropbox.com/xxxxxxxxx.json): failed to open stream: Invalid argument

    • Je crois que le problème viens du fait que l’URL est en HTTPS donc cryptée, car sinon ton code $json = file_get_contents(‘https://www.dropbox.com/xxxxxxxxxxx.json’);

      var_dump(json_decode($json)); est correct

      • Merci de ta réponse 🙂

        J’ai donc essayé de positionner ceci avant ton code:
        [code]// Création d’un gestionnaire curl

        Mais cela me retourne cette erreur ci:

        Fatal error: Call to undefined function curl_init()

        alors que j’ai bien dans mes extension le fichier php.curl.dll

        Aurais-tu une explication pouvant m’aider stp ?

        Encore merci.

          • J’utilise WAMP et je n’avais en effet pas activé l’extension (‘-_-)
            J’ai à présent cette erreur ci:
            ( ! ) Fatal error: Call to undefined function curl_unescape()

            Ce qui me semble bizarre vu que l’extension étant activé, je ne devrai pas avoir de fonction inconnue si ?

            Merci de tes réponses en tous cas 🙂

          • C’est étrange, ce message arrive souvent lorsque CURL n’est pas installé, je serais toi je demanderais de l’aide sur les forums de developpez.com, tu auras beaucoup plus de réponse et rapidement, j’espère que tu pourras rapidement résoudre ton souci 😉

  3. Salut,
    merci pour ces explications super utiles.

    J’ai une question cependant : comment traiter les infos lorsque l’on a une sorte de boucle d’informations ?

    Exemple :
    [
    {
    « response »: {
    « version »: « 0.9 »
    , »termsofService »: « http://www.actualitix.com »
    , »features »: {
    « date »: « 24/09/2013 »
    }
    },
    {
    « response »: {
    « version »: « 0.9 »
    , »termsofService »: « http://www.actualitix.com »
    , »features »: {
    « date »: « 24/09/2013 »
    }
    },
    ]

    Merci 😉

  4. Bonjour, dans votre exemple vous parlez d’un tableau

    {‘response’}->{‘features’}->{‘date’};
    $heure_cac40 = $parsed_json->{‘cotation_bourse’}[0]->{‘bourse’}->{‘heure’};
    $minute_cac40 = $parsed_json->{‘cotation_bourse’}[0]->{‘bourse’}->{‘minute’};
    $nom_compagnie = $parsed_json->{‘cotation_bourse’}[0]->{‘total’}->{‘compagnie’};
    $cotation_total = $parsed_json->{‘cotation_bourse’}[0]->{‘total’}->{‘cotation’};
    $tendance_total = $parsed_json->{‘cotation_bourse’}[0]->{‘total’}->{‘tendance’};

    echo « Le ${date_jour} à ${heure_cac40} h ${minute_cac40}, la cotation de ${nom_compagnie}
    est de ${cotation_total} et sa tendance de ${tendance_total} %n »;
    ?>

    la question est comment faire pour voir les autres? [0][1][2] etc…..

  5. Bonjour,
    dans votre exemple, vous mettez en dur dans le code PHP les noms ‘réponse’, ‘features’ et ‘date’

    si on souhaitait faire une boucle pour tout lire, sans connaitre ces noms à l’avance, comment faire pour y accéder et les coller dans une variable à utiliser après dans la requête ?:

    $monchampreponse = … {$monnomdechamp}->{‘features’}->{‘date’};

  6. bonjour, tout d’abord merci pour votre tuto en fait je sais pas si mon compte a ete trouver parmi vos tuto ou pas mais bon mon probleme est que mon service web permet d’effectuer une inscription en verifiant si l’email et le numero de telephone est correct avec un REGEX mon probleme est que je veut recuperer ce service avec un format JSON

LAISSER UN COMMENTAIRE

Merci de laisser votre commentaire
Merci d'entrer votre nom ici