מחולל סכמת JSON אונליין

צור סכמת JSON עמידה בתקן מתוך JSON מהעולם האמיתי—מידית, בטוחה וחינמית.

כלי זה מקבל דוגמת JSON ומפיק מסמך JSON Schema Draft-07 המשקף בדיוק את המבנה, סוגי הנתונים והמגבלות שלה. כל העיבוד מתבצע בדפדפן שלך לשמירה מלאה על פרטיות. אין העלאת או אחסון נתונים בשום מקום. אידיאלי לתיעוד API, אימות ויצירת קוד.

המר JSON לסכמת JSON למטה

כיצד פועלת יצירת הסכמה מתחת למכסה המנוע

יצירת סכמת JSON מתוך דוגמת JSON כוללת יותר מפשוט מיפוי שדות לטיפוסים. הכלי משתמש בכמה שלבים מרכזיים לדיוק ושלמות:

  1. ניתוח: הכלי מנתח את ה-JSON שלך בהתאם ל-ECMA-404, ומדווח על שגיאות מפורטות במקרה של קלט לא תקני או מבנים לא ברורים.
  2. ניתוח מבני: הכלי בונה ייצוג עץ של הנתונים, ומסווג כל נכס ואלמנט לפי טיפוסי הליבה של JSON Schema (אובייקט, מערך, מחרוזת, מספר, שלם, בוליאני, null).
  3. סריקה רקורסיבית: מבנים עמוקים ומקוננים—כולל מערכים של עצמים או מערכים מקוננים—נסרקים רקורסיבית ליצירת הגדרות סכימה מקוננות.
  4. הסקת טיפוסים ומיזוג: לכל נכס או אלמנט מערך מוסקים הטיפוסים. כאשר נכסים או פריטים מכילים טיפוסים מעורבים, ה'סוג' מוגדר כמערך (טיפוס איחוד) על פי מפרט JSON Schema.
  5. זיהוי חובה לעומת אופציונלי: על ידי ניתוח כל האובייקטים בכל רמה, הכלי מבדיל בין מפתחות שנמצאים תמיד (חובה) לאלו שנעדרים לפעמים (אופציונליים).
  6. מגבלות ערכים: במקום שבו אפשר, הכלי מוסיף enum (קבוצת ערכים מורשים), מינימום/מקסימום למספרים, מינימום/מקסימום אורך למחרוזות, ורמזים לפורמטים (כמו 'email', 'uri' או 'date-time').
  7. טיפול במקרי קצה: מוקד מיוחד ניתן למערכים ריקים, ערכי null ומבנים מפוזרים—להבטחת סכימות תקפות המתאימות למגוון המציאותי.
  8. סינתזת הסכמה: הסכימה הסופית מופקת כמסמך Draft-07 תואם תקן—מוכן לשימוש עם כלים כמו Ajv, OpenAPI, או ספריות יצירת קוד.

מדוע ליצור סכמת JSON? שימושים מעשיים

  • אימות אוטומטי: השתמש בסכימות שנוצרו לאכוף חוזי נתונים ולאמת נתונים נכנסים ב-APIs, מיקרו-שירותים או CLI שלך.
  • תיעוד API: צור אוטומטית מסמכים ומגלשי חקירה אינטראקטיביים (Swagger, Postman) עם הגדרות נתונים מדויקות.
  • יצירת קוד: הפק מודלים בטוחים טיפוס או מאמתים בשפות TypeScript, Python, Java ועוד על סמך הסכמה כמקור אמיתי יחיד.
  • יצירת נתוני בדיקה: כלים כמו JSON Schema Faker או Mockaroo משתמשים בסכימות לסינתזת נתוני דמה מציאותיים לבדיקות QA ועומסים.
  • רפקטורינג והגירה: אמת מבני נתונים ישנים או משתנים, והבטח תאימות תוך התפתחות ה-backend שלך.

תכונות טכניות

  • תאימות Draft-07 למקסימום תאימות עם מאמתים מרכזיים ופלטפורמות עיצוב API.
  • ניתוח רקורסיבי של עומק קיבוץ כלשהו—מערכים בתוך מערכים, עצמים בתוך מערכים ועוד.
  • הסקה מדויקת של טיפוס איחוד (מערך 'type') עבור שדות או פריטים המשתנים בדגימות שונות.
  • זיהוי אוטומטי של enums, אורך, תבניות, פורמטים, מינימום/מקסימום ומגבלות שגרתיות נוספות.
  • תמיכה מפורשת ב-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 זה

  1. הדבק או הקלד JSON לדוגמה בעורך למטה. הכלי מקבל כל JSON תקין, מאובייקטים פשוטים ועד מבנים מקוננים עמוקים.
  2. לחץ על 'צור סכמת JSON' כדי ליצור ולראות את סכמת ה-JSON שנוצרה.
  3. העתק, ערוך או הורד את הסכמה. שלב אותה ישירות בהגדרות ה-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.