DATAtourisme

Normalisation des tableaux

Bonjour,

Dans les flux JSON, lorsqu’un champ peut contenir une collection de valeurs, il arrive que le premier item de la collection (s’il n’y en a qu’un seul) soit directement à la racine du champ. Par exemple :

    "isLocatedAt": {
        "schema:closes": {
            "@value": "20:30:00",
            "@type": "xsd:time"
        },
        ...
    }

Alors que lorsqu’il y a plusieurs éléments dans la collection on aura :

    "isLocatedAt": {
        1: {
            "schema:closes": {
                "@value": "20:30:00",
                "@type": "xsd:time"
            },
            ...
         }
        2: {
            "schema:closes": {
                "@value": "20:30:00",
                "@type": "xsd:time"
            },
            ...
         },
         ...
    }

Il arrive même parfois que le champ contienne directement une chaîne de caractère (par exemple le champ hasBeenCreatedBy.schema:email) lorsqu’il y a un seul élément, ou bien un tableau même lorsqu’il n’y a qu’un seul élément.

Cette inconsistance dans la structure du flux le rend un peu difficile à manipuler et oblige une phase manuelle de traitement, qui pourra potentiellement être source de bugs, puisqu’il faut maintenir une liste de champs concernés par cette spécificité.

J’en profite aussi pour une seconde doléance : les tableaux numériques (collections) sont indexés à partir de 1, or en JSON un tableau numérique commence à 0. Du coup les objets JSON chargés en mémoire sont plus volumineux (puisqu’il s’agit de hashmap plutôt que de tableaux numériques), et ne sont jamais des tableaux numériques.

Merci :slight_smile:

Bonjour,

En JSON-LD, La structure de votre arbre d’un POI est effectivement dépendante de son contenu.
Si vous le traitez manuellement il faut systématiquement tester si une propriété pointe vers :

  • une référence d’objet
  • une valeur (date, chaîne de caractère, nombre, …)
  • un objet
  • un tableau

Il existe des librairies JSON-LD dans plusieurs langages qui peuvent vous faciliter la tache.
https://json-ld.org

Pour les tableaux numériques, je ne trouve pas dans votre flux JSON-LD d’indexation (commençant par 1 ou 0) mais uniquement des collections sous cette forme :

"takesPlaceAt": [{"@id":"data:765c77ad-c490-30ad-861d-0f420a86ff2b"},{"@id":"data:c92b0e1a-6ef8-3a27-bd45-fc2f6164233e"},{"@id":"data:c9c9669c-f57a-3531-ae0d-d415fcce2929"},{"@id":"data:e29104c4-e09b-33be-8fca-3a07e0a19d9e"}]

Dans l’extrait de votre flux ci-dessus il s’agit d’un tableau de référence d’objet. L’indexation de vos tableaux à partir de 1 ne viendrai elle pas de la librairie que vous utilisez pour manipuler du JSON ?

Cordialement.