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 du Club
    Inscrit en
    Septembre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 38
    Points : 50
    Points
    50
    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 : 59
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 expérimenté 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 : 37
    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
    Points : 1 695
    Points
    1 695
    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
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 38
    Points : 50
    Points
    50
    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