Altova MapForce 2024 Enterprise Edition

Exemple : Mapper depuis JSON vers CSV

Accueil Préc Haut Suivant

Cet exemple vous montre comment lire des données depuis un fichier JSON et les convertit en un fichier de texte séparé par une virgule avec MapForce. Vous allez aussi apprendre à mapper des données depuis des propriétés supplémentaires qui pourrait être présentes dans les fichiers d'instance JSON comme celle illustrée dans cet exemple. Les propriétés supplémentaires se réfèrent à des données qui sont présentes dans le fichier d'instance JSON même s'il n'est pas défini par le schéma. En règle générale, vous devriez éviter de vous appuyer sur des propriétés supplémentaires et, à la place, définir toutes les propriétés dans votre schéma JSON. Néanmoins, au cas où l'instance JSON contient des propriétés supplémentaires, vous pouvez utiliser la technique illustrée dans cet exemple.

 

Cet exemple est accompagné par un fichier de mappage de démonstration disponible sur  : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\ReadJSON.mfd. Si vous suivez les étapes ci-dessous, vous apprendrez à créer un fichier de mappage à partir de zéro.

 

Le fichier JSON source contient des enregistrements de personnes qui doivent être convertis en CSV. Veuillez noter le texte marqué : la première et la deuxième personne ont une propriété supplémentaire qui n'est pas définie dans le schéma, soit birthday.

 

[

 {

         "name": "Alethia Alonso",

         "email": "altethia@example.com",

         "age": 35,

         "birthday": "4 July"

 }, {

         "name": "Klaus Mauer",

         "email": "klaus@example.com",

         "age": 57,

         "birthday": "31 August"

 }, {

         "name": "Natsuo Shinohara",

         "email": "natsuo@example.com",

         "age": 29

 }        

]

People.json

Le schéma JSON utilisé dans l'exemple est représenté ci-dessous. Comme l'indique le mot-clé $schema, le schéma valide des instances JSON dans le cadre du Draft 04 JSON Schema. Il décrit un array people qui consiste en plusieurs objets person. L'objet people doit contenir au moins un objet person pour être valide. Chaque objet person contient une adresse name, age, et email en tant que propriétés. Veuillez noter que name et email sont de type string, alors que age est de type integer. De plus, les propriétés name et email sont requises, alors que age est optionnel.

 

{

 "$schema": "http://json-schema.org/draft-04/schema#",

 "title": "people",

 "type": "array",

 "items": {

 "title": "person",    

 "type": "object",

   "required": [

     "name",

     "email"

   ],  

   "properties": {

     "name": {

       "type": "string"

     },

     "email": {

       "type": "string",

       "format": "email"

     },

     "age": {

       "type": "integer"

     }

   }

 },

 "minItems": 1

}

 

Le fichier d'instance JSON contient les données des gens qui doivent être converties en CSV, comme suit :

 

[

 {

         "name": "Alethia Alonso",

         "email": "altethia@example.com",

         "age": 35,

         "birthday": "4 July"

 }, {

         "name": "Klaus Mauer",

         "email": "klaus@example.com",

         "age": 57,

         "birthday": "31 August"

 }, {

         "name": "Natsuo Shinohara",

         "email": "natsuo@example.com",

         "age": 29

 }        

]

 

People.schema.json

Chose importante, le schéma ne contient pas de propriété additionalProperties pour l'objet person. Lorsqu'elle ne se trouve pas dans le schéma JSON, la propriété additionalProperties possède la valeur par défaut de true, ce qui signifie que l'objet dans l'instance JSON peut avoir autant de propriétés supplémentaires que nécessaire et rester tout de même valide. C'est pourquoi un fichier d'instance JSON comme People.json validera avec succès par rapport à ce schéma.

 

Pour atteindre les objectifs de mappage de cet exemple, suivre les étapes suivantes.

 

Étape 1 : Ajouter le fichier de source JSON dans le mappage 

1.Dans le menu Insérer, cliquer sur Schéma/Fichier JSON et chercher le fichier Example1.schema.json disponible dans le dossier <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\. Lorsque vous êtes invité à spécifier une instance, chercher le fichier Example1.json. À ce moment, le composant MapForce ressemble à l'exemple suivant :

 

mf_json_01

 

La structure du composant MapForce ressemble à celle du fichier JSON lui-même, à l'exception du nœud property (additional). Ce nœud indique que la propriété additionalProperties de l'objet person est soit manquante soit définie sur true dans le schéma. Cela signifie que le schéma peut contenir des propriétés personnalisées supplémentaires, donc MapForce affiche le nœud au cas où vous souhaitez mapper à partir d'une propriété supplémentaire de l'objet (l'étape suivante vous montrera comment procéder).

 

Pour changer le fichier de source JSON ou le fichier de schéma JSON à tout moment, double-cliquer sur la barre de titre du composant JSON et modifier les paramètres, voir Paramètres de composant JSON.

 

Étape 2 : Ajouter le CSV cible dans le mappage

 

1.Dans le menu Insérer, cliquer sur Fichier texte.

 

mf_json_02

 

2.Choisir Utiliser un traitement simple pour les fichiers CSV standard, puis cliquer sur Continuer.

 

mf_json_03

 

3.Cliquer sur Ajouter champ quatre fois pour ajouter quatre champs CSV dans le composant suivant, puis cliquer sur OK.

 

 

Pour plus d'informations concernant les composants de texte, voir Fichiers CSV et Texte.

 

Étape 3 : Tracer les connexions de mappage

1.Dans le mappage, tracer les connexions entre le composant JSON et le composant CSV comme indiqué ci-dessous. 

mf_json_04

Pour plus d'informationsvoir Travailler avec des connexions.

 

Étape 4 : Apercevoir le mappage

Vous pouvez maintenant apercevoir rapidement la sortie de transformation en cliquant sur l'onglet Sortie. Le résultat est :

 

Alethia Alonso,altethia@example.com,35,

Klaus Mauer,klaus@example.com,57,

Natsuo Shinohara,natsuo@example.com,29,

 

Comme le montre la sortie, pour chaque objet de personne dans le fichier JSON, une nouvelle ligne est créée et les propriétés d'objet sont séparées par des virgules, ce qui est le comportement attendu.

 

Néanmoins, nous n'avons pas encore mappé la propriété supplémentaire birthday qui existe dans le fichier d'instance JSON, même s'il n'existe pas dans le schéma.

 

Étape 5 : Mapper des propriétés supplémentaires

Se rappeler que le champ birthday est une propriété supplémentaire n'est pas définie dans le schéma. Pour lire des données à partir de ces champs, MapForce fournit des items supplémentaires dans le composant JSON. 

 

Dans cet exemple, afin de lire des données depuis le champ birthday, ajouter la chose suivante dans le mappage :

 

1.Une constante avec la valeur "birthday", voir Ajouter une constante au mappage.

2.Un composant de filtre, voir Filtres et Conditions.

3.La fonction logique equal, voir Ajouter une fonction dans le mappage.

 

Ensuite, connecter les composants tels qu'illustrés ci-dessous. En connectant les composants de cette manière instruit MapForce de chercher une propriété supplémentaires avec le nom birthday, et, si une valeur string est trouvée, la copier dans le Champ4 du composant de texte.

mf_json_05

Dans le mappage ci-dessus, l'item name sous Propriété (supplémentaire) vous permet d'accéder à la propriété supplémentaire par son nom. Les items suivants (stringnumberboolean, etc.) correspondent aux types de données JSON. Ils peuvent être utilisés pour accéder à la valeur actuelle JSON de ce type. Dans notre exemple, le nom de la propriété supplémentaire est "birthday" et le type est "string", qui est la raison pour laquelle ces deux items sont connectés au filtre.

 

Si vous consultez la sortie de la transformation à ce moment, le résultat est :

 

Alethia Alonso,alethia@example.com,35,4 July

Klaus Mauer,klaus@example.com,57,31 August

Natsuo Shinohara,natsuo@example.com,29,

 

Comme le montre la sortie, le quatrième champ CSV contient maintenant la valeur de la seule propriété supplémentaire de type "string", qui est, dans ce cas, birthday. De même, puisque la troisième personne n'a pas d'anniversaire, aucune valeur n'est disponible dans le CSV au niveau de la position correspondante.

© 2018-2024 Altova GmbH