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

Talend Discussion :

Création de boucles imbriquées en JSON


Sujet :

Talend

  1. #1
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 38
    Par défaut Création de boucles imbriquées en JSON
    Bonjour à tous,
    Je travaille sur TOS 7.2.1.

    Je dois écrire un fichier JSON contenant plusieurs boucles, c'est-à-dire contenant une liste d'objets A, auxquels j'associe, pour chaque valeur A, une liste d'objets B.

    J'utilise le composant tWriteJsonField, avec la configuration suivante:

    Nom : talend JSON - config 3.png
Affichages : 268
Taille : 8,3 Ko

    J'obtiens le résultat suivant, qui contient bien toutes mes données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {"boucle1":{"id_A":"A2","info1":"A2.1","info2":"A2.2","boucle2":{"id_B":"B3","info3":"B3.3","info4":"B3.4"}}}
    {"boucle1":{"id_A":"A1","info1":"A1.1","info2":"A1.2","boucle2":{"id_B":"B2","info3":"B2.3","info4":"B2.4"}}}
    {"boucle1":{"id_A":"A2","info1":"A2.1","info2":"A2.2","boucle2":{"id_B":"B4","info3":"B4.3","info4":"B4.4"}}}
    {"boucle1":{"id_A":"A1","info1":"A1.1","info2":"A1.2","boucle2":{"id_B":"B1","info3":"B1.3","info4":"B1.4"}}}
    Cependant, il y a une répétition des blocs A pour chaque valeur associée B, ce qui est plus facilement visible après mise en forme:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    [
      {
        "boucle1": {
          "id_A": "A2",
          "info1": "A2.1",
          "info2": "A2.2",
          "boucle2": {
            "id_B": "B3",
            "info3": "B3.3",
            "info4": "B3.4"
          }
        }
      },
      {
        "boucle1": {
          "id_A": "A1",
          "info1": "A1.1",
          "info2": "A1.2",
          "boucle2": {
            "id_B": "B2",
            "info3": "B2.3",
            "info4": "B2.4"
          }
        }
      },
      {
        "boucle1": {
          "id_A": "A2",
          "info1": "A2.1",
          "info2": "A2.2",
          "boucle2": {
            "id_B": "B4",
            "info3": "B4.3",
            "info4": "B4.4"
          }
        }
      },
      {
        "boucle1": {
          "id_A": "A1",
          "info1": "A1.1",
          "info2": "A1.2",
          "boucle2": {
            "id_B": "B1",
            "info3": "B1.3",
            "info4": "B1.4"
          }
        }
      }
    ]

    Comme plusieurs éléments B sont associés à un même élément A, je souhaiterais obtenir une sous-liste des éléments B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    {"boucle1": {"id_A": "A2","info1": "A2.1","info2": "A2.2","boucle2": [{"id_B": "B3","info3": "B3.3","info4": "B3.4"},{"id_B": "B4","info3": "B4.3","info4": "B4.4"}]}}
    {"boucle1": {"id_A": "A1","info1": "A1.1","info2": "A1.2","boucle2": [{"id_B": "B2","info3": "B2.3","info4": "B2.4"},{"id_B": "B1","info3": "B1.3","info4": "B1.4"}]}}
    Mis en forme:
    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
    34
    35
    36
    37
    38
    39
    40
    41
     
    [
      {
        "boucle1": {
          "id_A": "A2",
          "info1": "A2.1",
          "info2": "A2.2",
          "boucle2": [
            {
              "id_B": "B3",
              "info3": "B3.3",
              "info4": "B3.4"
            },
            {
              "id_B": "B4",
              "info3": "B4.3",
              "info4": "B4.4"
            }
          ]
        }
      },
      {
        "boucle1": {
          "id_A": "A1",
          "info1": "A1.1",
          "info2": "A1.2",
          "boucle2": [
            {
              "id_B": "B2",
              "info3": "B2.3",
              "info4": "B2.4"
            },
            {
              "id_B": "B1",
              "info3": "B1.3",
              "info4": "B1.4"
            }
          ]
        }
      }
    ]

    Je n'ai trouvé nulle part d'information à ce sujet.
    Je vous remercie par avance.

    arsonix

  2. #2
    Membre très actif Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Par défaut
    Solution 1 :

    ça a toujours été compliqué de produire des données structurées profonde en XML comme en JSON. Ce qui se traduit par le fait que tu as un tWriteJsonField qui a un niveau de boucle et qui ne peut pas en avoir deux.

    Dans la théorie il faudrait que tu regroupes tes boucle_2 par boucle_1... puis tu construis 1 JsonArray de boucle_2 dans un 2e tWriteJsonField et apres il reste à injecter ton JsonArray dans ton premier tWriteJsonField. En priant qu'il ne soit pas formater.

    _____________________
    Solution 2 :

    Après tu peux essayer de faire un groupBy dans ton tWriteJsonField mais il faut que tes données soient triées et que tu boucles par boucle_2

  3. #3
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 38
    Par défaut
    Merci Geoffrey,

    J'ai entretemps récupéré la solution en interne.
    Il fallait que je déclare ma boucle1 en tant qu'élément de groupe, quand ma boucle 2 est déclarée en tant qu'élément de boucle.

    Je ne sais pas combien de niveaux de groupe il est possible de définir, mais 1 seul niveau répond à mon besoin.

    J'espère que cela aidera d'autres développeurs

    arsonix

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

Discussions similaires

  1. Deux boucles imbriqués
    Par stade13 dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2012, 21h06
  2. [XL-2003] Boucle imbriqué
    Par stephsen dans le forum Excel
    Réponses: 2
    Dernier message: 03/12/2011, 18h44
  3. [Ocaml] boucle imbriqué
    Par Capitain_jupi dans le forum Caml
    Réponses: 2
    Dernier message: 01/10/2011, 15h17
  4. [Batch] faire deux boucles imbriques
    Par fk04 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/03/2010, 12h32
  5. Probleme boucle imbriqué
    Par bigbug412 dans le forum Struts 1
    Réponses: 0
    Dernier message: 10/07/2009, 15h00

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