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

Format d'échange (XML, JSON...) Java Discussion :

json schema / type personnalisé?


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut json schema / type personnalisé?
    Bonjour,
    J'ai le fichier json schema suivant:
    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
    {
    "my_tree": {
      "type": "object",
      "properties": {
        "constantTree":{
          "type": "object",
          "properties": {
            "value": {"type": "integer"}
          }
        }
      }
    },
     
    "my_flower": {
      "type": "object",
      "properties": {
        "constantFlower":{
          "type": "object",
          "properties": {
            "value": {"type": "integer"},
            "age": {"type": "integer"}
          }
        }
      }
    },
     
    "garden" : {
      "type": "object",
        "properties": {
        "Asset":{
          "type": "object",
          "properties": {
            "plant": {"type": ????}
          }
        }
      }
    }
    }
    Je ne sais pas quoi mettre comme type pour "plant" (là où j'ai mis des ???.
    "plant" est un "string" censé prendre la valeur "my_tree" ou "my_flower", selon ce qui a été réellement mis dans le fichier à valider.
    Si ce fichier contient la définition de ces deux objets, "plant" peut prendre la valeur de l'une ou l'autre. En tout cas ce n'est pas un simple "string" et ça ne peut pas être un enum statique de type ["y_tree", "my_flower"].

    Merci pour votre aide

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Json schéma est encore un objet flou, changeant ... Si on veut mettre my_tree, my_flower à re-usage ici ou là, on les place dedans le secteur sous le mot clé "definitions". En puis, on doit serrer plus my_tree et my_flower (au plus bas ajouter les propriétés "additionalProperties", "required") pourque la validation se fait plus étroitement et focalisée.

    Une écriture de json schéma peut être fait comma ça.
    Code json : 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
    {
    "type": "object",
    "properties": {
        "garden":{
            "type":"object",
            "properties": {
                "Asset": {
                    "type":"object",
                    "properties" :{
                        "plant":{
                            "anyOf":[{"$ref":"#/definitions/my_tree"}, {"$ref":"#/definitions/my_flower"}]
                        }
                    }
                }
            }
        }
    },
     
    "definitions": {
        "my_tree":{
            "type":"object",
            "properties":{
                "constantTree":{
                    "type":"object",
                    "properties":{
                        "value":{"type":"integer"}
                    },
                    "additionalProperties":false
                }
            },
            "required":["constantTree"]
        },
        "my_flower":{
            "type":"object",
            "properties":{
                "constantFlower":{
                    "type":"object",
                    "properties":{
                        "value":{"type":"integer"},
                        "age":{"type":"integer"}
                    },
                    "additionalProperties":false
                }
            },
            "required":["constantFlower"]
        }
    }
     
    }
    Avec ce schéma, on peut valider à la fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
        "garden":{
            "Asset":{
                "plant":{
                    "constantFlower":{
                        "value":123,
                        "age":2
                    }
                }
            }
        }
    }
    ou le même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
        "garden":{
            "Asset":{
                "plant":{
                    "constantTree":{
                        "value":123
                    }
                }
            }
        }
    }
    Avec une base de demo, vous vous débrouillez si le besoin est un peu différent en détail de ça - en tout cas, la question n'est pas très claire au début et je fournis; ce que je peux déjà, des éléments à tenir compte. Voilà !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ce retour. J'essaie de préciser ma question. Le but est de pouvoir valider:

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
        "my_tree": {
             "constantTree":{
                "value":123
            }
         },
        "garden":{
            "Asset":{
                "plant": "my_tree"
            }
        }
    }

    mais de ne pas valider:

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
        "my_tree": {
             "constantTree":{
                "value":123
            }
         },
        "garden":{
            "Asset":{
                "plant": "my_flower"
            }
        }
    }

    car dans le second cas "my_flower" n'a pas été défini.

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Qu'avez vous fait entre-temps? Bon, je peux étaler une possible solution !
    Code json : 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    {
        "type":"object",
        "properties":{
            "garden":{
                "type":"object",
                "properties":{
                    "Asset":{
                        "type":"object",
                        "properties":{
                            "plant":{
                                "type":"string",
                                "enum":["my_tree","my_flower"]
                            }
                        }
                    }
                },
                "additionalProperties":false
            },
            "my_flower":{
                "type":"object",
                "properties":{
                    "constantFlower":{
                        "type":"object",
                        "properties":{
                            "value":{"type":"integer"},
                            "age":{"type":"integer"}
                        },
                        "required":["value","age"],
                        "additionalProperties":false
                    }
                },
                "additionalProperties":false
            },
            "my_tree":{
                "type":"object",
                "properties":{
                    "constantTree":{
                        "type":"object",
                        "properties":{
                            "value":{"type":"integer"}
                        },
                        "required":["value"],
                        "additionalProperties":false
                    }
                },
                "additionalProperties":false
            }
        },
        "allOf":[{
            "if":{
                "properties":{"garden":{"properties":{"Asset":{"properties":{"plant":{"const":"my_flower"}}}}}}
            },
            "then":{
                "required":["garden","my_flower"],
                "minProperties":2,
                "maxProperties":2
            }
        },
        {
            "if":{
                "properties":{"garden":{"properties":{"Asset":{"properties":{"plant":{"const":"my_tree"}}}}}}
            },
            "then":{
                "required":["garden","my_tree"],
                "minProperties":2,
                "maxProperties":2
            }
        }]
    }
    Voilà !

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci

Discussions similaires

  1. [C#] Comment appeler un objet C++ ?
    Par xarius dans le forum C++/CLI
    Réponses: 11
    Dernier message: 28/03/2007, 09h30
  2. [DEBUTANT]Appeler un objet
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/04/2006, 12h15
  3. Réponses: 4
    Dernier message: 15/11/2005, 10h49
  4. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  5. [C#] Problème pour l'appel d'objet...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2004, 09h59

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