Problème d'imbrication de références et de tableaux de références

Problème d'imbrication de références et de tableaux de références - Perl - Programmation

Marsh Posté le 21-06-2012 à 17:31:08    

Bonjour,
 
Je rencontre un petit problème de décodage de données au format JSON et suis un peu perdu dans l'arborescence de ces données.
J'arrive à accéder à un premier niveau de données, mais pas à aller plus loin dans l'imbrication.
Pour faire plus simple, j'ai une source de donnée de cette sorte au format JSON :
 

Code :
  1. {racine_0{
  2.    "racine_a":{
  3.       "title":"toto"
  4.    }
  5.    "racine_b":[{
  6.       "id":"1234",
  7.       "type":"blog",
  8.       "data":[{
  9.          "data1":{"id":4567,"name":"toto1"},
  10.          "data2":[{"id":9485,"name":"toto2"},{"id":7463,"name":"toto3"}]
  11.        }]
  12.    }]
  13. }}


 
Avec mon script perl, j'arrive à accéder au contenu sous la racine_b mais non au tableau de références située sous data.
Si $content est la source de donnée JSON:
 

Code :
  1. $json = new JSON;
  2. $json_text = $json->decode($content);
  3. foreach $racine (@{$json_text->{racine_0}->{racine_b}}){
  4.    %hash = ();
  5.    $hash{id} = $racine->{id};
  6.    $hash{type} = $racine->{type};
  7. }


 
Pour aller plus loin dans l'arborescence, je suis un peu perdu pour la déclaration de l'imbrication, d'autant plus que la structure imbrique plusieurs tableaux (par exemple data2).
 
est ce que quelqu'un pourrait m'apporter un peu d'aide  :??:

Reply

Marsh Posté le 21-06-2012 à 17:31:08   

Reply

Marsh Posté le 21-06-2012 à 23:03:15    

Code :
  1. print $json_text->{racine_0}->{racine_b}->[0]->{data}->[0]->{data1}->{id}, "\n";
  2. print $json_text->{racine_0}->{racine_b}->[0]->{data}->[0]->{data1}->{name}, "\n";
  3. print $json_text->{racine_0}->{racine_b}->[0]->{data}->[0]->{data2}->[0]->{id}, "\n";
  4. print $json_text->{racine_0}->{racine_b}->[0]->{data}->[0]->{data2}->[0]->{name}, "\n";
  5. print $json_text->{racine_0}->{racine_b}->[0]->{data}->[0]->{data2}->[1]->{id}, "\n";
  6. print $json_text->{racine_0}->{racine_b}->[0]->{data}->[0]->{data2}->[1]->{name}, "\n";


donne

4567
toto1
9485
toto2
7463
toto3


Bon, après, tu peux essayer de faire plus générique, en testant si ce que tu as est une référence, et sur quoi:
ref($toto) renvoie la chaine vide si $toto est un scalaire et pas une référence, 'SCALAR' si c'est une référence à un scalaire, 'ARRAY' si c'est une référence à une liste, et 'HASH' si c'est une référence à un hash (et 'CODE' si c'est une référence à une subroutine, 'GLOB' à une variable globale, mais ça ne devrais pas intervenir).
A+,


Message édité par gilou le 22-06-2012 à 02:45:28

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-06-2012 à 17:25:56    

OK, merci, je comprend mieux la construction de l'accès à la structure !
 
Ca marche bien comme ça !

Reply

Marsh Posté le 22-06-2012 à 20:48:49    

Dans ce genre de situation, si tu sais plus qui est quoi,
 
use Data::Dumper;
...
print Dumper($MaVariableQuiFaitSuer);
 
ça aide bien en général.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed