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 Perl Discussion :

Création Json et tableau compliqué


Sujet :

Langage Perl

  1. #1
    LFC
    LFC est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 106
    Points : 70
    Points
    70
    Par défaut Création Json et tableau compliqué
    Bonjour,

    je tente de réaliser ce json-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
     "forum":
     [
      {"nom":"forum1","langage":"MYSQL"},
      {"nom":"forum2","langage":"PGSQL"}
     ]
    }
    comme contrainte, j'ai une variable qui est de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mavar = "forum1~MYSQL,forum2~PGSQL";
    J'ai fait plusieurs tentatives pour jongler avec un tableau associatif, ou des tableaux simples, mais les valeurs sont écrasées et je ne garde que le dernier élément ajouté...

    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
     
    #!/usr/bin/perl
    use JSON;
     
    $mavar = "nom1~url1,nom2~url2";
     
    my @tab  = split(",",$mavar);
     
    foreach my $one (@tab){
    	($part1,$part2) = split("~",$one);
            #*ici il faut mémoriser ces valeurs d'une certaine manière...
    }
     
     
    $json->{'copyright'} = "Developpez.net";
     
    $json->{'contenu'} = \%ici_generalement_on_met_le_tableau_généré_plus_haut;
     
    $json_text = to_json($json,{utf8 => 1, pretty => 1});
     
    print "$json_text\n";
    Est-ce quelqu'un a une idée svp ?

    [le forum Perl n'acceptant plus de nouveaux messages, je me permets d'écrire dans celui-ci]

    Merci.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Bonjour,

    En gros, tu veux créer un hash de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    my %data = (
    	'forum' => [
    		{
    			'nom'     => 'forum1',
    			'langage' => 'MYSQL'
    		},
    		{
    			'nom'     => 'forum2',
    			'langage' => 'PGSQL'
    		},
    	],
    );

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Cadeau :
    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
    #!/usr/bin/perl 
    use strict;
    use warnings;
    use JSON;
     
    my %donnees;
    my $mavar = "forum1~MYSQL,forum2~PGSQL,forum3~ORACLE,nom1~url1,nom2~url2";
     
    my %decomposition = split /[~,]/, $mavar;
    foreach my $nom ( sort keys %decomposition ) {
    		my ($nom_num) = $nom =~ /(.+)\d+$/;
    		if ( not exists $donnees{$nom_num} ) { $donnees{$nom_num} = []; }
    		push @{ $donnees{$nom_num} }, {nom => $nom, langage => $decomposition{$nom} };
    }
    my $json_text = JSON->new->utf8->pretty->encode( \%donnees );
     
     
    print "$json_text\n";
    Résultat :
    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
    {
       "forum" : [
          {
             "langage" : "MYSQL",
             "nom" : "forum1"
          },
          {
             "nom" : "forum2",
             "langage" : "PGSQL"
          },
          {
             "nom" : "forum3",
             "langage" : "ORACLE"
          }
       ],
       "nom" : [
          {
             "langage" : "url1",
             "nom" : "nom1"
          },
          {
             "langage" : "url2",
             "nom" : "nom2"
          }
       ]
    }

  4. #4
    LFC
    LFC est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    après tant d'années, c'est toujours formidable de voir que tu encore en train de répondre dans ce forum

    Bien que mon exemple ait laissé penser que les termes commençaient par la même chaîne de caractères et que le dernier élément est un chiffre, je me suis permis de peaufiner le script pour que cette regex disparaisse de l'équation.

    Si je m'en sors, je clôturerai ce fil.

    Merci.

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Pas de soucis , au plaisir.

  6. #6
    LFC
    LFC est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    mon parseur n'est pas top et le résultat c'est que je n'arrive pas à faire un sous-noeud proprement.

    Je retente le coup en exprimant le besoin, et en spécifiant cette fois que le contenu de tout le tableau "medias" peut être dans une variable dont le contenu est séparé par des caractères spéciaux, le tout pour que l'algo détecte chaque élément, le décompose sous forme de hash et génère chaque tableau ensuite en json. En fait, on va prendre des libertés sur cette variable, et je me contenterai de la générer au mieux.

    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
    33
     
    "noeud_parent": {
    	"copyright": "Djibril 2022",
    	"medias": 
    	[
    	{
    	    "nom": "FBI",
    	    "site":
    	    {
    		"url": "https://www.fbi.gov",
    		"pays": "US"
    	    },
    	    "application_mobile":
    	    {
    		"apple": "https://www.fbi.gov/news/apps/dashboard-app-itunes-store",
    		"android": "https://www.fbi.gov/news/apps/dashboard-app-google-play-store"
    	    }
    	},
    	{
    	    "nom": "NSA",
    	    "site":
    	    {
    		"url": "https://www.nsa.gov",
    		"pays": "US"
    	    },
    	    "application_mobile":
    	    {
    		"apple": "https://www.nsa.gov/news/apps/dashboard-app-itunes-store",
    		"android": "https://www.nsa.gov/news/apps/dashboard-app-google-play-store"
    	    }
    	}		       
    	]
        }
    Le nom des champs "site", "url", "pays", "application_mobile", "apple", "android" peuvent être soit dans le code, soit dans la variable. Peu importe...


    Et si c'est vraiment trop compliqué, je descendrai d'un niveau de difficulté et réaliserai un json pas aussi joli mais au moins rapidement réalisable, style:
    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
     
    "noeud_parent": {
    	"copyright": "Djibril 2022",
    	"medias": 
    	[
    	{
    	    "nom": "FBI",
    	    "url": "https://www.fbi.gov",
    	    "pays": "US",
    	    "application_mobile_apple": "https://www.fbi.gov/news/apps/dashboard-app-itunes-store",
    	     "application_mobile_android": "https://www.fbi.gov/news/apps/dashboard-app-google-play-store"
    	},
    	{
    	    "nom": "NSA",
    	    "url": "https://www.nsa.gov",
    	    "pays": "US",
    	    "application_mobile_apple": "https://www.nsa.gov/news/apps/dashboard-app-itunes-store",
    	    "application_mobile_android": "https://www.nsa.gov/news/apps/dashboard-app-google-play-store"
    	}		       
    	]
        }

    Merci.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Bonsoir,

    Pour que l'on puisse t'aider, il faudrait nous donner ta variable d'origine pour que l'on puisse essayer de la parser.

  8. #8
    LFC
    LFC est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    je n'ai pas de variable définie où sont les infos.

    Tout est en DB, je me suis dit que le mieux était de créer 1 seule variable concaténant toutes les infos en mode clef:valeur et ensuite parser autant que possible d'une manière ou d'une autre.

    Mais j'ai sûrement pris le problème à l'envers ; on peut donc très bien créer 2, voire plusieurs autres variables du moment que le parsing est le plus facile à réaliser pour générer le json...

    Le squelette est le suivant. Chaque "media" est composé des éléments suivants :
    - nom qui est un champs texte
    - un site qui est composé de 2 éléments (obligatoirement)
    - une application mobile qui est composée de 2 éléments (obligatoirement)

    Et il peut y avoir de 1 à n medias.

    Est-ce que c'est plus clair maintenant ?

    Merci.

Discussions similaires

  1. [WM22] Création d'un tableau à partir des données JSON (Windev mobile 22)
    Par kernel57 dans le forum Windev Mobile
    Réponses: 10
    Dernier message: 29/03/2018, 10h12
  2. Création d'un tableau dynamique avec XSL-FO
    Par lionelbrizuela dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/01/2006, 12h04
  3. [Tableaux] création d'un tableau arborescant
    Par peppena dans le forum Langage
    Réponses: 23
    Dernier message: 30/01/2006, 15h13
  4. Création dynamique de tableau.
    Par Yux dans le forum C
    Réponses: 6
    Dernier message: 05/11/2005, 17h24
  5. Création d'un tableau composé de TComboBox
    Par gilles641 dans le forum Langage
    Réponses: 1
    Dernier message: 26/07/2005, 11h30

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