Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v20.6
JSON Resoudre pointeurs

JSON Resoudre pointeurs 


 

JSON Resoudre pointeurs ( objet {; options} ) -> Résultat 
Paramètre Type   Description
objet  Objet in Objet contenant des pointeurs JSON à résoudre
in Objet avec pointeurs JSON résolus (uniquement si Résultat est un objet)
options  Objet in Options pour la résolution des pointeurs
Résultat  Objet in Objet contenant le résultat du traitement

La commande JSON Resoudre pointeurs résout tous les pointeurs JSON présents dans objet, en tenant compte des options définies (s'il y en a).

Les pointeurs JSON sont particulièrement utiles pour :

  • intégrer une partie d'un document JSON externe ou réutiliser une partie d'un document JSON à divers endroits dans le même document JSON, afin de "factoriser" l'information,
  • exprimer une structure cyclique en JSON,
  • définir un objet modèle contenant des propriétés par défaut stockées en JSON.

Passez dans le paramètre objet un objet contenant des pointeurs JSON à résoudre (pour une description de la syntaxe des pointeurs JSON, veuillez vous reporter au paragraphe Définition des pointeurs JSON ci-dessous).

Note : L'objet source sera mis à jour avec le résultat de la résolution des pointeurs après l'exécution de la commande (sauf si le résultat n'est pas un objet, voir ci-dessous). Si vous souhaitez conserver une version originale de objet, il sera nécessaire d'appeler la commande OB Copier au préalable. 

Optionnellement, vous pouvez passer dans options un objet contenant des propriétés spécifiques à utiliser lors de la résolution des pointeurs. Les propriétés suivantes sont prises en charge :

PropriétéType de valeurDescription
rootFolderChaîneChemin absolu (en syntaxe 4D standard) du dossier à utiliser pour résoudre les pointeurs relatifs dans objet. Par défaut, le dossier Resources de la base est utilisé.
mergeBooléenFusionner les objets avec les objets pointeur (true) au lieu de les remplacer (false). Par défaut, l'option est à faux

Après l'exécution de la commande :

  • si le résultat de la résolution des pointeurs est un objet, objet est mis à jour et contient l'objet résultant.
  • si le résultat de la résolution des pointeurs est une valeur scalaire (i.e. un texte, un numérique...), objet n'est pas modifié et la valeur résultante est retournée dans la propriété "value" du résultat de la fonction.

Dans tous les cas, la commande retourne un objet contenant les propriétés suivantes :

PropriétéType de valeurDescription
valuetousRésultat du traitement de la commande sur objet ; si le résultat est un objet, est égal à l'objet en sortie.
successBooléentrue si tous les pointeurs ont été résolus avec succès
errorsCollectionCollection d'erreurs (le cas échéant)
errors[].codeNombreCode d'erreur
errors[].messageChaîneMessage d'erreur
errors[].pointerURIChaîneValeur de pointeur
errors[].referredPathChaîneChemin complet de document

JSON Pointer est un standard qui définit une syntaxe de chaîne qui peut être utilisée pour accéder à un champ ou une valeur de clé particulière dans la totalité du document JSON. Ce standard a été décrit dans la RFC 6901.

Un pointeur JSON est, à proprement parler, une chaîne composée de parties séparées par des '/'. Un pointeur JSON est généralement placé dans un URI qui spécifie le document dans lequel le pointeur sera résolu. Le caractère "#' est utilisé dans l'URI pour désigner le fragment contenant le pointeur JSON. Par convention, un URI contenant un pointeur JSON doit être placé dans une propriété d'objet JSON nommée "$ref".

{
   "$ref":<chemin>#<pointeur_json>
}

Note : 4D ne prend pas en charge le caractère "-" en tant que référence d'éléments de tableau non existants.

Les pointeurs JSON sont résolus récursivement, ce qui signifie que si un pointeur résolu contient lui-même des pointeurs, ils sont résolus et ainsi de suite jusqu'à ce que tous les pointeurs soient résolus. Dans ce contexte, tous les chemins de fichiers situés dans les URIs des pointeurs JSON peuvent être relatifs ou absolus. Ils doivent utiliser le "/" en tant que délimiteur de chemin et sont résolus selon les principes suivants :

  • Un chemin relatif ne doit pas débuter par '/'. Il est résolu relativement au document JSON contenant la chaîne du chemin.
  • Un chemin absolu débute par '/'.  Seuls les chemins des filesystem sont acceptés comme chemins absolus. Par exemple, "/RESOURCES/templates/myfile.json" pointe vers le fichier "myfile.json" situé dans le dossier Resources de la base courante.

Notes :

  • La résolution de nom tient compte des majuscules/minuscules.
  • 4D ne résout pas les chemins vers des fichiers JSON situés sur le réseau (débutant par "http/https").

Cet exemple basique illustre comment un pointeur JSON peut être défini et remplacé dans un objet :

  // création d'un objet avec valeurs
 C_OBJET($o)
 $o:=Creer objet("value";42)
 
  // création de l'objet pointeur JSON
 C_OBJET($ref)
 $ref:=Creer objet("$ref";"#/value")
 
  // ajout de l'objet pointeur JSON en tant que propriété
 $o.myJSONPointer:=$ref
 
  // résolution de l'ensemble et vérification que le pointeur a été résolu
 C_OBJET($result)
 $options:=Creer objet("rootFolder";Dossier 4D(Dossier Resources courant);"merge";Vrai)
 $result:=JSON Resoudre pointeurs($o;$options)
 Si($result.success)
    ALERTE(JSON Stringify($result.value))
  //{"value":42,"myJSONPointer":42}
 Sinon
    ALERTE(JSON Stringify($result.errors))
 Fin de si

Vous voulez réutiliser l'adresse "billingAddress" comme adresse "shippingAddress" dans l'objet JSON suivant (nommé $oMyConfig):

{
    "lastname": "Doe",
    "firstname": "John",
    "billingAddress": { 
        "street": "95 S. Market Street",
        "city": "San Jose",
        "state": "California" 
    },
    "shippingAddress": { "$ref": "#/billingAddress" }
}

Après l'exécution de ce code :

 $oResult:=JSON Resoudre pointeurs($oMyConfig)

... l'objet suivant est retourné :

{
    "success": true,
    "value": {
        "lastname": "Doe",
        "firstname": "John",
        "billingAddress": {
            "street": "95 S. Market Street",
            "city": "San Jose",
            "state": "California" 
        },
        "shippingAddress": {
            "street": "95 S. Market Street",
            "city": "San Jose",
            "state": "California" 
        }
    }
}

Cet exemple illustre l'effet de l'option "merge". Vous souhaitez modifier les droits d'un utilisateur, basés sur un fichier par défaut.

{
    "rights": { 
        "$ref": "defaultSettings.json#/defaultRights",
        "delete": true,
        "id": 456
    }
}

Le fichier defaultSettings.json contient :

{
    "defaultRights":
    {
        "edit": true,
        "add": false,
        "delete": false
    }
}

Si vous exécutez :

 C_OBJET($options)
 $options:=Creer objet("merge";Faux//remplacer le contenu
 $oResult:=JSON Resoudre pointeurs($oMyConfig;$options)

... la valeur résultante est exactement le contenu du fichier defaultSettings.json :

{
    "success": true,
    "value": {
        "rights": {
            "edit": true,
            "add": false,
            "delete": false
        }
    }
}

Si vous exécutez :

 C_OBJET($options)
 $options:=Creer objet("merge";Vrai//fusionner les contenus
 $oResult:=JSON Resoudre pointeurs($oMyConfig;$options)

... la valeur résultante est une version modifiée de l'objet original :

{
    "success": true,
    "value": {
        "rights": {
            "edit": true,
            "add": false,
            "delete": true,
            "id": 456
        }
    }
}



Voir aussi  

Download HDI database

 
PROPRIÉTÉS 

Produit : 4D
Thème : JSON
Numéro : 1478
Nom intl. : JSON Resolve pointers

Commande(s) éligible(s) à l'exécution dans un process préemptif

 
PAGE CONTENTS 
 
HISTORIQUE 

Créé : 4D v16 R5

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v20)
4D - Langage ( 4D v20.1)
4D - Langage ( 4D v20.2)
4D - Langage ( 4D v20.3)
4D - Langage ( 4D v20.4)
4D - Langage ( 4D v20.5)
4D - Langage ( 4D v20.6)