Talend : Création d’un tableau dans un json

Posted on Tue, Nov 14, 2017 Tuto Talend ETL JSON Array API

Dans ce petit tutoriel Talend, nous allons voir comment créer un tableau dans un JSON

Données en entrée

Les données en entrée arrivent sous la forme suivante :

dossier libelle montant taxe total numero flag 134 lib1 325 24 349 2 flg1 134 lib2 178 13 191 7 flg2

Données attendues en sortie

Nous voulons obtenir le JSON suivant :

[
  {
    "libelle": "lib1",
    "montant": " 325",
    "taxe": " 24",
    "total": " 349",
    "numero": " 2",
    "flag": "flag1"
  },
  {
    "libelle": "lib2",
    "montant": " 178",
    "taxe": " 13",
    "total": " 191",
    "numero": " 7",
    "flag": "flag2"
  }
]

Construction du JSON

À la suite du composant des données d’entrée, nous utilisons un tWriteJsonFields. Il faut ensuite cliquer sur « Configurer la structure JSON ». Dans la nouvelle fenêtre, nous ajoutons un attribut au rootTag :

Nous lui donnons le libellé « class »

Nous ajoutons ensuite la valeur « array » à ce libellé

Nous ajoutons ensuite un nouveau sous-élément nommé « element ».

A ce sous-élément, nous ajoutons un nouvel attribut nommé type avec comme valeur par défaut « string ».

Finalisation

Pour terminer la création du tableau, il suffit de prendre l’ensemble des colonnes et de les rajouter comme sous-élément de « element » puis définir ce dernier comme Element boucle.

Ici, nous ne prenons pas la colonne dossier car c’est elle qui va ne servir à regrouper les données. Nous allons modifier le schéma et créer la colonne de sortie (ici sortie). Ensuite dans les options du composant nous allons regrouper les données sur le numéro de dossier.

Pour ce faire, dans le tableau Group by, nous sélectionnons sortie comme Colonne de sortie et dossier comme Colonne d’entrée. Enfin nous cochons Supprimer le nœud racine pour supprimer la balise rootTag du résultat final.

Ci-dessous, l’ensemble des étapes :

Après exécution du job, nous obtenons bien le résultat suivant :

[
  {
    "libelle": "lib1",
    "montant": " 325",
    "taxe": " 24",
    "total": " 349",
    "numero": " 2",
    "flag": "flag1"
  },
  {
    "libelle": "lib2",
    "montant": " 178",
    "taxe": " 13",
    "total": " 191",
    "numero": " 7",
    "flag": "flag2"
  }
]