JSONデータからJSONスキーマを生成するツール[終了]


178

このjsonスキーマドラフトがあります。JSONデータのサンプルを取得し、JSONスキーマのスケルトンを生成したいと思います。これは、手作業でやり直し、説明や必須など、特定の例からは推測できないものを追加できます。

たとえば、私の入力からexample.json

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

私はjson_schema_g​​eneratorツールを実行して、以下を取得します。

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

この例は手動でコーディングされているため、エラーが発生している可能性があります。JSON-> JSONスキーマの変換に役立つツールはありますか?


しかし、ツールは文字列から文字列への一般的なマップではないことをどのようにして知るのでしょうか。
hmakholmがモニカを去った'23

1
提供されている例では、値がたまたま文字列であるキーと値のペアを持つ辞書(python用語)があることは明らかです。同じデータを記述する他のJSONスキーマは知りません。そして、これは簡単な例にすぎません。もちろん、JSONスキーマドラフトで指定されているように、はるかに複雑になる可能性があります。
blueFast

3
それで、「任意の文字列から他の任意の文字列へのマッピング」(ファイル名からコンテンツの説明へのマッピングなど)は、JSONスキーマとして表現できないと主張していますか?私が知っている限りでは、それは本当かもしれませんが、そのようなスキーマは私の見方ではかなり役に立たないでしょう。
hmakholmがモニカに去った

1
うーん、質問に関連する何かについて話し合っているかどうかはわかりませんが、とにかく。より良い例を見てみましょう。たとえば、JSONデータが人物のプロパティを記述している場合、JSONデータに固定キーを含めることは間違いなく役立ちます。「foo」と「bar」の代わりに、「name」と「surname」について考えてください。"name"と "surname"は、人物JSONデータの明確に固定されたプロパティであるため、任意の文字列ではなく、人物スキーマの一部です。もちろん値は任意なので、スキーマの一部ではありません。
blueFast

3
固定キーを持つことは、必要な場合もあれば、そうでない場合もあります。これが実際のポイントです。自動化ツールが単一のサンプルからどのオプションを必要としているかを検出する方法はありません。
hmakholmがモニカを去った

回答:


92

あなたはこれを探しているかもしれません:

http://www.jsonschema.net

これは、JSON文字列からJSONスキーマを自動的に生成できるオンラインツールです。また、スキーマを簡単に編集できます。


3
始めるのに簡単で便利な場所。ただし、このページの他の場所で特定されたjsonschema.netで報告された問題、およびオフラインまたは少なくともAPIでアクセス可能なツールを開発ワークフローに含め、後の例でスキーマの更新を許可する理由について説明します。 Steve Bennettによるオプションのリスト。
nealmcb

このサイトは、最初のインポート後にスキーマを編集するときに予期しないエラーをスローすることに注意してください。
Coreus

1
のようなもののためにクラッシュします{"hello": "world","num": 42}が有望に見えます
DBX12

3
古いサイトは間違いなく十分ではありませんでした。JSONSchema.Netが書き直されました。はるかに堅牢です。問題がある場合は、GitHubで報告してください。喜んで修正します:github.com/jackwootton/json-schema
Jack

jsonschema2pojo.orgは、私が長年使用してきたものです
誰かのどこか

83

他の回答をまとめると、これまでに提案されたJSONスキーマジェネレーターがあります。

オンライン:

Python:

NodeJS:

ルビー:


jskemetor-いいえsetup.py
Att Righ

これらのいずれかがYAML入力をサポートするかどうかを知っていますか?変換することはできますが、追加の手順が1つだけあります。
DylanYoung

28

GenSON(PyPI | Github)は、複数のオブジェクトから単一のスキーマを生成できるJSONスキーマジェネレーターです。スキーマをマージすることもできます。Pythonで書かれており、CLIツールが付属しています。

(完全な開示:私が著者です。)


1
お疲れ様でした!私がskinferに取り掛かる前にこれを見つけられなかったことを後悔しています:github.com/scrapinghub/skinfer
Elias Dorneles 15/09/23

1
Pythonではありませんが、もう1つgithub.com/snowplow/schema-guru
chuwy

1
すごい!オンラインスキーマジェネレーターjsonschema.netにがっかりしました(ほとんどのオブジェクトの「必須」プロパティの作成に失敗し、コンパクトな(1行)プロパティを生成するか、IDを省略するオプションがなく、最も重要なのは、単一スキーマ配列の作成に使用されたデータの検証に失敗しました)。ツールを試すことを楽しみにしています。
デイブ

@Dave-私もjson schema.netで同様の問題に直面していますが、このPythonツールは役に立ちましたか?
Cshah 2017

1
@Cshah:私はGenSONに非常に感銘を受け、パッチを提供しました。作成者が慣れているよりも制限の厳しいスキーマを生成する必要があったので、認識されないJSONデータに注意が必要なフラグが付けられるように、パターンプロパティとadditionalProperties / additionalItemsを生成するオプションを備えたバージョンをフォークしました。
デイブ


6

数か月後、私が持っている最良の答えは私のシンプルなツールです。それは生ですが機能的です。

私が欲しいのはこれに似たものです。JSONデータは、JSONスキーマのスケルトンを提供できます。まだ実装していませんが、既存のJSONスキーマに基づいて既存のJSONスキーマを提供し、既存のJSONスキーマとJSONデータを組み合わせて更新されたJSONスキーマを生成できるようにする必要があります。そのようなスキーマが入力として指定されていない場合、完全にデフォルト値が使用されます。

これは反復的な開発に非常に役立ちます。ツールが初めて実行されるとき、JSONスキーマはダミーですが、データの進化に従って自動的に調整できます。


2
@Green Suの提案があなたのニーズにどのように応えられなかったかについて興味があります。私はあなたがジャンプスターター(あなたの用語は「骨格」です)を提供するユーティリティを記述していると思います-足場コードジェネレータのようなものですか?
justSteve 2012

13
基本的に、そのツールの問題は、それがオンラインツールであることです。開発環境でローカルに実行する必要があります。他のタスクの一部として自動的に実行されることもあります。「ここにコピーして、そこに貼り付ける」ツールは役に立ちません。REST APIがあれば十分です。
blueFast 2012

2
@justSteve:オンラインツールは、コピーと貼り付けのワークフローを使用するだけでなく、まだバグがあるようです(元の質問から4年後)。ツールが不正なスキーマを生成するjsonオブジェクトがありますが、それらをバグレポートとして送信する最小限のテストケースにまだ削減していません。
デイブ


5

generate-schemaNPM | Github)はJSONオブジェクトを受け取り、そこからスキーマを生成します。1つの出力はJSONスキーマであり、Node.jsで記述され、ファイルをパイプするためのREPLおよびClIツールが付属しています。

完全な開示:私は著者です:)


モジュールをドラフト4+に更新する計画はありますか?最小、最大属性、参照などを追加しますか?btwツールをありがとう:)私のプロジェクトで使用します
Mr. Alien


3

json-schema-generatorは、RubyベースのJSONスキーマジェネレーターです。JSONスキーマのドラフト3と4の両方をサポートしています。スタンドアロンの実行可能ファイルとして実行することも、Rubyスクリプト内に埋め込むこともできます。

次に、必要に応じて、json-schemaを使用して、新しく生成されたスキーマに対してJSONサンプルを検証できます。


3

複数の入力をサポートするオフラインツールの場合、これまでに見た中で最高のものはhttps://github.com/wolverdude/GenSON/です 何千ものファイルがあるため、標準入力でファイル名を取得するツールが欲しいです。 。ただし、開いているファイル記述子が不足しているため、ファイルが閉じていることを確認してください。再帰を処理するJSONスキーマジェネレーターも見たいです。私は現在、JavaクラスからJSONスキーマに行くことを期待して、JSONオブジェクトからJava クラスを生成する作業をしています。好奇心が強い場合、またはバグを特定したい場合は、ここに私のGenSONスクリプトを示します。

#!/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 

最初に、unix.stackexchange.com / questions / 211803 /…への回答を提供できますか?
デイブ


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.