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

Programmation et administration système Perl Discussion :

JSON -> PERL


Sujet :

Programmation et administration système Perl

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut JSON -> PERL
    Bonjour à toi petit visiteur du net :-)

    Voici mon problème:

    Données JSON que je reçois:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    {
        "response": {
            "message": null,
            "exception": null,
            "context": [
                {
                    "headers": null,
                    "name": "device_sylvain_1_vol",
                    "children": [
     
                    ],
                    "parent": "/clusters/cluster-1/virtual-volumes",
                    "attributes": [
                        {
                            "value": "1310720",
                            "name": "block-count"
                        },
                        {
                            "value": "4096B",
                            "name": "block-size"
                        },
                        {
                            "value": "synchronous",
                            "name": "cache-mode"
                        }
                    ],
                    "type": "virtual-volume"
                }
            ],
            "custom-data": null
        }
    }
    J'aimerais uniquement récupérer le HASH "attributes" voir même directement une de ses valeurs via son nom...

    J'ai essayé plein de syntaxe et autre mais rien y fait :-(

    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @resultat = &get(\@src_headers,$src_url);
    my $decoded = decode_json($resultat[2]);
    my $hash_ref = $decoded->{'response'}->{'context'}->{'attributes'};
    print "$hash_ref";
    Ce print n'est là que pour voir ma HASH key après je peux la déférencer.

    Retour du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Not a HASH reference at ./test.pl line 98, <STDIN> line 1. #ERREUR LIGNE 4 DANS L'EXEMPLE
    Je n'y comprend plus rien et les tuto JSON sont vraiment pas très clair...
    La doc du CPAN sort même d'une autre planète à mon avis :-)

    Merci d'avance et bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    D'après le code JSON, attributes est sans doute une référence sur un tableau de hashes.

    Utilise
    pour visualiser la structure de response.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    La structure "context" est un tableau (d'un élément dans ton exemple).
    Si l'on considère que l'on veut accéder au premier élément de context pour trouver "attributes", alors il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $attributes = $decoded->{'response'}->{'context'}->[0]->{'attributes'};
    Ensuite, 'attributes' est à nouveau un tableau. Pour trouver l'attribut avec son nom, il faut alors parcourir le tableau et "greper" son nom (par exemple "block-count") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $attr_name = "block-count";
    my $attribute = grep $_->{name} eq $attr_name, @$attributes;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

Discussions similaires

  1. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  2. [langage] Inclure de perl en c !!!
    Par ryo00 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2002, 10h03
  3. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  4. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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