Créez un format de fichier "flexible" ou "extensible" et tôt ou tard un groupe de développeurs viendra se plaindre de la validation. Il y a différents outils qui permettent de gérer cela, mais en général, ils peuvent être classés comme suit:
- Supposer que les données sont correctement formatées.
- Vérification manuelle des données malformées et tenter de corriger.
- Vérification manuelle des données malformées et rejeter le cas échéant.
- Vérifier automatiquement les données malformées.
Le but de cet article n'est pas de débattre de ces différentes options, mais plutôt de résumer les outils disponibles pour la validation automatique.
JSON Schema
JSON Schema est un standard en cours de validation supporté par 17 projets différents. Il est disponible pour JavaScript, Java, Python, Ruby, Perl, PHP, .NET, ActionScript, C, Haskell, et Erlang. Le format est plus compliqué que VeriJSON à cause d’un schéma ayant peu de ressemblance avec les données. Il est également plus complet, avec la possibilité de limiter les nombres, limiter la taille des listes et éviter les doublons dans les listes. Il supporte aussi les références vers d'autres schémas, permettant de séparer les schémas importants en composants plus petits.
Atdgen
Atdgen offre un support de la désérialisation et de sérialisation de JSON dans OCaml. Les schémas JSON sont créés en utilisant des fichiers atd. Ces fichiers sont utilisés avec un générateur de code pour créer des fichiers de classe OCaml et des convertisseurs object/JSON. Dans Atdgen, la validation a lieu durant le processus de désérialisation.
Les règles de validation dans les fichiers atd sont ouvertes, les développeurs peuvent injecter n'importe quel code OCaml directement dans le fichier atd. Les références vers d'autres fichiers de schémas sont pris en charge.
Atdgen est disponible sous licence open source.
DataContractJsonSerializer
Basé sur le DataContractSerializer de WCF, DataContractJsonSerializer utilise les définitions des classes et des attributs pour déterminer comment un fichier JSON est validé et finalement désérialisé. Ceci est approprié pour des tâches de base, mais a tendance à présenter des problèmes de performance et a des difficultés avec les dictionnaires. La validation est quasiment limitée à la structure de base.
Json.NET
Json.NET de James Newton-King est de loin le plus complet sérialiseur/désérialiseur JSON disponible aujourd'hui. Comme DataContractJsonSerializer, Json.NET peut utiliser des classes pour définir son schéma. Vous pouvez soit utiliser les attributs des contrats de données WCF ou des attributs de sérialisation JSON.NET et il prend en charge une grande variété de types, y compris DataTable et les entités nHibernate. Et depuis ce mois-ci, JSON.NET 5.0 prend en charge les entiers sans limitation de taille (via BigInteger) et les collections en lecture seule qui exposent un constructeur IEnumerable.
JSON.NET supporte aussi la validation via JSON Schema.
VeriJSON
VeriJSON est une librairie en Objective-C qui se repose sur des correspondances à base de pattern. Les patterns sont eux-mêmes écrits en JSON. Les types supportés sont "number, "string", "bool" et" "url". Les Strings peuvent être limités en utilisant des expressions régulières et les urls par les schémas (p. ex. http, ftp). Les tableaux et objets sont structurellement représentés et les propriétés optionnelles sont supportées.
VeriJSON est aussi disponible sous licence open source.