オンラインJSONからJSONスキーマジェネレーター
実用的なJSONから堅牢で標準準拠のJSONスキーマを即時、安全かつ無料で生成。
このツールはJSONサンプルを受け取り、その構造、データ型、制約を正確に反映したJSON Schema Draft-07ドキュメントを生成します。すべての処理はブラウザ内で完結し、プライバシーを完全に保護。データは一切アップロードや保存されません。APIドキュメント、検証、コード生成に最適です。
以下にJSONをJSONスキーマに変換
スキーマ生成の仕組み
サンプルJSONからJSONスキーマを生成するには、単にフィールドを型にマッピングする以上の処理が必要です。このツールは正確性と網羅性のために以下の主要ステップを踏みます:
- 解析:ツールはECMA-404準拠でJSONを解析し、不正な入力や曖昧な構造に対して詳細なエラーを報告します。
- 構造解析:JSONスキーマのコア型(オブジェクト、配列、文字列、数値、整数、ブール、null)に基づき、データのツリーモデルを構築します。
- 再帰的走査:オブジェクトの配列やネストされた配列など、深い階層構造を再帰的に遍歴し、入れ子のスキーマ定義を生成します。
- 型推論とマージ:各プロパティや配列要素の型を推論し、複数型が混在する場合はJSONスキーマ仕様に従い'type'を配列(ユニオン型)で表現します。
- 必須と任意の判別:各階層の全オブジェクトを分析し、常に存在する必須キーと時折欠損する任意キーを区別します。
- 値の制約:可能な限り列挙値(enum)、数値の最小/最大、文字列の最小/最大長、形式ヒント(email、uri、date-timeなど)を推論します。
- 特殊ケースの対応:空配列、null、スパース構造(データ欠落)に特別な配慮を払い、実データの多様性に対応した有効なスキーマを作成します。
- スキーマ合成:最終的にDraft-07準拠のスキーマ文書を生成。AjvやOpenAPI、コード生成ライブラリで即利用可能です。
JSONスキーマを生成する理由と実用例
- 自動検証:生成スキーマはデータ契約の強制やAPI・マイクロサービス・CLIの受信ペイロードの検証に活用可能。
- APIドキュメント:正確なデータ定義でドキュメントやインタラクティブ探索ツール(Swagger、Postman)を自動生成。
- コード生成:TypeScript、Python、Javaなどで型安全なモデルやバリデーターをスキーマを唯一の真実の情報源として生成。
- テストデータ生成:JSON Schema FakerやMockarooなどのツールはスキーマを使い、実用的なモックデータをQAや負荷テストで合成。
- リファクタリング&移行:既存や変化するデータ構造の検証により、バックエンドの進化に対応した互換性を保証。
技術的特徴
- Draft-07対応により主要なバリデーターやAPI設計プラットフォームとの高い相互運用性を実現。
- 任意深度のネスト解析が可能。多重配列や配列内オブジェクトなど複雑構造もカバー。
- サンプル間で変動するフィールド・項目の正確なユニオン型('type'配列)推論。
- 列挙値(enum)、長さ、パターン、形式、最小・最大値など主要な制約を自動検出。
- null、空配列・空オブジェクト、部分的なレコードを明示的にサポート。
- スキーマ生成は完全にブラウザ内で実行。入力したJSONはデバイスから一切外に出ません。
技術例:サンプルJSONからDraft-07スキーマへ
サンプルJSON入力
{ "transaction": { "id": "txn_abc123", "amount": 99.95, "currency": "USD", "status": "completed", "meta": { "ip": "203.0.113.1", "tags": ["recurring", null] } }, "refunded": false, "notes": null }生成されたJSONスキーマ出力
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "transaction": { "type": "object", "properties": { "id": { "type": "string" }, "amount": { "type": "number" }, "currency": { "type": "string", "minLength": 3, "maxLength": 3 }, "status": { "type": "string", "enum": ["completed"] }, "meta": { "type": "object", "properties": { "ip": { "type": "string", "format": "ipv4" }, "tags": { "type": "array", "items": { "type": ["string", "null"] } } }, "required": ["ip", "tags"] } }, "required": ["id", "amount", "currency", "status", "meta"] }, "refunded": { "type": "boolean" }, "notes": { "type": ["null"] } }, "required": ["transaction", "refunded", "notes"] }
このJSONからJSONスキーマツールの使い方
- 下のエディターに例のJSONを貼り付けるか入力してください。単純なオブジェクトから深くネストした構造まで任意の有効なJSONを受け付けます。
- 「JSONスキーマを生成」をクリックすると、生成されたJSONスキーマを表示します。
- スキーマをコピー、編集、またはダウンロードしてください。API定義、検証ロジック、ドキュメントに直接統合可能です。
JSONからスキーマ生成のためのコード例
さまざまなプログラミング言語でJSONからJSONスキーマを生成する方法を解説します。
JavaScript (Node.js)
Install: npm install jsonschema-generator
const generateSchema = require('jsonschema-generator');
const data = {
name: "Alice",
age: 30,
isActive: true,
tags: ["user", "admin"]
};
const schema = generateSchema(data);
console.log(JSON.stringify(schema, null, 2));
JavaScript (Node.js) with generate-schema
Install: npm install generate-schema
const GenerateSchema = require('generate-schema');
const data = { name: "Alice", age: 30, tags: ["admin", "user"] };
const schema = GenerateSchema.json('User', data);
console.log(JSON.stringify(schema, null, 2));
Python with genson
Install: pip install genson
from genson import SchemaBuilder
sample = {"name": "Alice", "age": 30, "tags": ["user", "admin"]}
builder = SchemaBuilder()
builder.add_object(sample)
print(builder.to_json(indent=2))
Python with jsonschema-generate
Install: pip install jsonschema-generate
from jsonschema_generate import generate_schema
sample = {"name": "Alice", "age": 30, "tags": ["user", "admin"]}
schema = generate_schema(sample)
print(schema)
Go
Install: go get github.com/invopop/jsonschema
package main
import (
"encoding/json"
"fmt"
"github.com/invopop/jsonschema"
)
type User struct {
Name string `json:"name"
Age int `json:"age"
Tags []string `json:"tags"
}
func main() {
schema := jsonschema.Reflect(&User{})
out, _ := json.MarshalIndent(schema, "", " ")
fmt.Println(string(out))
}
Java with jsonschema2pojo (CLI/Gradle/Maven)
Install: jsonschema2pojo CLI or plugin (see https://www.jsonschema2pojo.org/)
# Generate Java POJOs *from* a JSON Schema, not the reverse.
# For schema generation from Java, see tools like jackson-module-jsonSchema.
# See: https://github.com/FasterXML/jackson-module-jsonSchema
C# with NJsonSchema
Install: dotnet add package NJsonSchema
using NJsonSchema;
using Newtonsoft.Json.Linq;
var sample = JObject.Parse("{\"name\":\"Alice\",\"age\":30, \"tags\":[\"user\"]}");
var schema = await JsonSchema.FromSampleJsonAsync(sample.ToString());
Console.WriteLine(schema.ToJson());
PHP with swaggest/json-schema
Install: composer require swaggest/json-schema
require 'vendor/autoload.php';
use Swaggest\JsonSchema\Structure\ClassStructure;
$sample = ["name" => "Alice", "age" => 30, "tags" => ["user"]];
$schema = ClassStructure::exportSchema($sample);
echo json_encode($schema, JSON_PRETTY_PRINT);
Ruby with json_schemer
Install: gem install json_schemer
require 'json_schemer'
sample = { "name" => "Alice", "age" => 30, "tags" => ["admin", "user"] }
schema = JSONSchemer.schema(sample)
puts schema.to_json
Bash (with Python genson)
Install: pip install genson
echo '{"name":"Alice","age":30,"tags":["user","admin"]}' | genson | jq .
Rust with schemars
Install: cargo add schemars
use schemars::JsonSchema;
use serde::Serialize;
#[derive(Serialize, JsonSchema)]
struct User {
name: String,
age: u32,
tags: Vec<String>,
}
fn main() {
let schema = schemars::schema_for!(User);
println!("{}", serde_json::to_string_pretty(&schema).unwrap());
}
Scala with com.github.andyglow:jsonschema
Install: libraryDependencies += "com.github.andyglow" %% "jsonschema" % "0.7.7"
import json.schema._
case class User(name: String, age: Int, tags: List[String])
val schema = Json.schema[User]
println(schema.asSpray.prettyPrint)
TypeScript with typescript-json-schema
Install: npm install -g typescript-json-schema
# Generate schema from a TypeScript interface:
typescript-json-schema tsconfig.json User --out schema.json
# See https://github.com/YousefED/typescript-json-schema
Dart (manual, no auto-inference)
Install: None (write schema manually)
// Dart does not have an automatic JSON Schema generator yet.
// Manually define schema as a Dart Map or use online tools.