web-dev-qa-db-fra.com

Outil pour générer un schéma JSON à partir de données JSON

Nous avons ce schéma json draft . Je souhaite obtenir un échantillon de mes données JSON et générer un squelette pour le schéma JSON, que je peux retravailler manuellement, en ajoutant des éléments tels que description, requis, etc., qui ne peuvent pas être déduits des exemples spécifiques.

Par exemple, à partir de mon entrée example.json:

{
    "foo": "lorem", 
    "bar": "ipsum"
}

Je lancerais mon outil json_schema_generator et obtiendrais:

{ "foo": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  },
  "bar": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  }
}

Cet exemple a été codé manuellement, il peut donc contenir des erreurs. Existe-t-il un outil qui pourrait m'aider à convertir le schéma JSON -> JSON?

160
dangonfast

Voyant que cette question suscite de nombreux votes positifs, j'ajoute de nouvelles informations (je ne sais pas si c'est nouveau, mais je ne pouvais pas le trouver à ce moment-là).

21
dangonfast

Vous recherchez peut-être ceci:

http://www.jsonschema.net

C'est un outil en ligne qui peut générer automatiquement un schéma JSON à partir d'une chaîne JSON. Et vous pouvez facilement modifier le schéma.

88
Green Su
66
Steve Bennett

GenSON ( PyPI | Github ) est un nouveau générateur de schéma JSON pouvant générer un schéma unique à partir de plusieurs objets. Vous pouvez également fusionner des schémas avec elle. Il est écrit en Python et est fourni avec un outil CLI.

(Divulgation complète: je suis l'auteur.)

21
wolverdude

Après plusieurs mois, la meilleure réponse que j'ai est mon outil simple. C'est brut mais fonctionnel.

Ce que je veux, c'est quelque chose de similaire à this . Les données JSON peuvent fournir un squelette pour le schéma JSON. Je ne l'ai pas encore implémenté, mais il devrait être possible de donner un schéma JSON existant comme base, afin que le schéma JSON existant et les données JSON puissent générer un schéma JSON mis à jour. Si aucun schéma de ce type n'est donné en entrée, toutes les valeurs par défaut sont prises.

Cela serait très utile pour le développement itératif: lors de la première utilisation de l'outil, le schéma JSON est factice, mais il peut être affiné automatiquement en fonction de l'évolution des données.

5
dangonfast

Il existe un outil python permettant de générer un schéma JSON pour un JSON donné: https://github.com/perenecabuto/json_schema_generator

5

generate-schema ( NPM | Github ) prend un objet JSON. Il en génère des schémas. L'une des sorties est un schéma JSON, il est écrit dans Node.js et est livré avec un outil REPL et ClI permettant de canaliser des fichiers dans.

Divulgation complète: je suis l'auteur :)

4
Nijikokun

Il existe un outil nodejs qui prend en charge json schema v4 à l’adresse https://github.com/krg7880/json-schema-generator

Cela fonctionne soit comme un outil de ligne de commande, soit comme une bibliothèque nodejs:

var jsonSchemaGenerator = require('json-schema-generator'),
    obj = { some: { object: true } },
    schemaObj;

schemaObj = jsonSchemaGenerator(json);

json-schema-generator est un générateur de schéma JSON soigné basé sur Ruby. Il prend en charge les brouillons 3 et 4 du schéma JSON. Il peut être exécuté en tant qu'exécutable autonome ou intégré dans un script Ruby.

Ensuite, vous pouvez utiliser json-schema pour valider les échantillons JSON par rapport à votre schéma nouvellement généré, si vous le souhaitez.

3
HappyCoder86

Il y a beaucoup d'outils mentionnés, mais un autre inferencer appelé JSON Schema pour l'enregistrement:

https://github.com/rnd0101/json_schema_inferencer

(ce n'est pas une bibliothèque ou un produit, mais un script Python)

Avec la divulgation complète habituelle: je suis l'auteur.

2
Roman Susi

Pour les outils hors ligne prenant en charge plusieurs entrées, le meilleur que j'ai vu jusqu'à présent est https://github.com/wolverdude/GenSON/ J'aimerais voir un outil qui prend les noms de fichiers en standard entrée parce que j'ai des milliers de fichiers. Cependant, je manque de descripteurs de fichiers ouverts, assurez-vous donc que les fichiers sont fermés . J'aimerais également voir les générateurs de schémas JSON qui gèrent la récursivité. Je travaille maintenant à la génération de Java classes à partir d'objets JSON dans l'espoir de passer au schéma JSON à partir de mon Java. _ Des classes. Voici mon script GenSON si vous êtes curieux ou souhaitez identifier des bogues.

#!/bin/sh
ulimit -n 4096
rm x3d*json
cat /dev/null > x3d.json
find ~/Downloads/www.web3d.org/x3d/content/examples -name '*json' -      print| xargs node goodJSON.js | xargs python bin/genson.py -i 2 -s     x3d.json >> x3d.json
split -p '^{' x3d.json x3d.json
python bin/genson.py -i 2 -s x3d.jsonaa -s x3d.jsonab /Users/johncarlson/Downloads/www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter02-GeometryPrimitives/Box.json > x3dmerge.json 
2
John Carlson

Pour node.js> 6.0.0, il existe également le module json-schema-by-example .

0
Jerome WAGNER