J'ai un cas d'utilisation où j'ai besoin de définir une configuration json pour déterminer la clé pour un ensemble de dimensions donné. La configuration ressemble à ceci:
{
"foo": {
"bar": {
"a": "abc",
},
"car": {
"a": "xyz",
},
"dar": {
"a": "abc"
}
}
Comment puis-je spécifier "abc" au début du JSON et le réutiliser? L'exemple ci-dessus si une petite configuration. Je peux finir par avoir un gros fichier de configuration. Cela aidera à garder la configuration cohérente en cas de futures mises à jour. Est-ce possible avec JSON ou devrais-je explorer d'autres options?
Juste pour clarifier, ma question est d'éviter la redondance dans les configurations json, et non dans le schéma.
3 Réponses :
Le mot clé définitions est conçu pour ce cas d'utilisation.
Voici un exemple du document de spécification lié:
{
"type": "array",
"items": { "$ref": "#/definitions/positiveInteger" },
"definitions": {
"positiveInteger": {
"type": "integer",
"exclusiveMinimum": 0
}
}
}
Dans cet exemple , où un sous-schéma aurait été défini pour la valeur des items , le schéma défini dans définitions / positiveInteger est maintenant référencé.
https://tools.ietf.org/html/draft -handrews-json-schema-validation-01 # section-9
Remarque: Vous ne pouvez utiliser des références que là où vous auriez autrement un sous-schéma. Vous ne pouvez pas référencer des données, par exemple la valeur d'une énumération.
Pour en savoir plus: http://json-schema.org/understanding-json-schema/structuring.html
Merci! J'ai examiné la documentation du schéma json avant de publier la question. (: Bien qu'il soit facile de réutiliser des champs dans le schéma. Je ne suis pas au courant du fichier de configuration lui-même contenant des possibilités de réutilisation.
Fichier de configuration?
Je veux dire, la configuration elle-même (en supposant qu'elle soit stockée dans un fichier). Ce que je veux dire, c'est que je veux une réutilisabilité dans la configuration.
J'ai peur de ne pas savoir ce que vous entendez par «configuration» dans ce contexte. Je n'ai montré que le schéma JSON. définitions est un mot clé de schéma JSON conçu pour aider à permettre la réutilisation dans le schéma. Pouvez-vous expliquer ce que vous entendez par «configuration»? Je ne vois aucune configuration, fichier ou autre ici.
Ainsi, le schéma est en fait utilisé pour définir la structure attendue d'un JSON. Là où, je suis plus intéressé par la réutilisation dans le JSON sérialisé lui-même.
Oh. Alors laissez-moi vérifier que je comprends. Vous avez un fichier JSON, et vous voyez comment le schéma JSON a des références, et vous souhaitez utiliser des références dans votre fichier JSON, n'est-ce pas? Eh bien, JSON ne prend pas en charge cela. Je sais que vous pouvez utiliser jsonnet pour référencer ou inclure d'autres fichiers, mais je ne l'ai pas utilisé. Vous devrez lire la documentation sur jsonnet.org/learning/tutorial.html
Cela signifierait que votre JSON source est dupliqué, mais que vous générez toujours des fichiers JSON dupliqués que d'autres peuvent utiliser. Juste comme ça.
J'adore jsonnet! Merci pour la recommandation! Pouvez-vous ajouter cela comme réponse? Même si je ne l'utilise pas pour ce cas d'utilisation particulier, je pense que cela répond efficacement à ma question et je peux l'utiliser pour de futurs cas d'utilisation. (:
Terminé. StackOverflow considère que demander une bibliothèque ou une ressource hors site est "hors sujet", mais étant donné que vous ne l'avez pas fait dans cette question, je la considère comme valide, et j'ai donc fait ce que vous avez posé et ajouté une autre question. Je laisserai mon autre question telle quelle, au cas où la recherche foo amènerait ici des personnes qui ont le problème que je pensais que vous aviez.
JSON lui-même ne prend en charge rien comme les références de schéma JSON.
Vous pouvez utiliser jsonnet pour référencer ou inclure d'autres fichiers, mais je n'ai pas utilisé moi-même.
Puisque JSON lui-même ne prend pas en charge ce type d'abstraction, ce dont vous avez besoin est un moyen de générer un fichier JSON à partir de quelque chose qui le fait. Permettez-moi de suggérer Dhall :
Votre modèle (stocké dans tmp.dhall ) pourrait ressembler à
$ dhall-to-json < tmp.dhall | jq .
{
"foo": {
"dar": {
"a": "abc"
},
"car": {
"a": "xyz"
},
"bar": {
"a": "abc"
}
}
}
Ensuite, vous utiliseriez dhall-to-json pour produire un fichier JSON ( jq étant utilisé uniquement pour imprimer le résultat).
let abc_val = "abc"
in {
foo = {
bar = {a = abc},
car = {a = "xyz"},
dar = {a = abc}
}
}
Étant donné que JSON lui-même ne prend pas en charge ce type d'abstraction, vous avez besoin d'un format différent à partir duquel vous pouvez générer votre fichier JSON.
Malheureusement, le JSON sérialisé devrait être codé en dur, écrit par un humain. La partie génération serait super facile si nous utilisons une interface de programmation pour cela. (:
Dans quel environnement peut-il faire la distinction entre une personne qui tape et la sortie d'un programme?