Tiešsaistes JSON uz JSON shēmas ģenerators

Ģenerējiet izturīgas, standartiem atbilstošas JSON shēmas no reālas pasaules JSON — nekavējoties, droši un bez maksas.

Šis rīks ņem JSON piemēru un izveido JSON Schema Draft-07 dokumentu, kas precīzi atspoguļo tā struktūru, datu tipus un ierobežojumus. Viss apstrādes process notiek jūsu pārlūkprogrammā, nodrošinot pilnīgu privātumu. Dati netiek augšupielādēti vai saglabāti. Ideāli piemērots API dokumentācijai, validācijai un koda ģenerēšanai.

Konvertējiet zemāk JSON uz JSON shēmu

Kā darbojas shēmas ģenerēšana aizkulisēs

JSON shēmas ģenerēšana no JSON piemēra ietver vairāk nekā vienkāršu lauku sasaisti ar tipiem. Šis rīks izmanto vairākus svarīgus soļus, lai nodrošinātu pareizību un pilnīgumu:

  1. Parsēšana: Rīks analizē jūsu JSON atbilstoši ECMA-404 standartam, ziņojot par sīkiem kļūdu aprakstiem par nederīgu ievadi vai neskaidriem elementiem.
  2. Strukturālā analīze: Izveido datu koka attēlojumu, klasificējot katru īpašību un elementu pēc JSON shēmas pamattipiem (objekts, masīvs, virkne, skaitlis, veselais skaitlis, loģiskais, null).
  3. Rekursīva apmeklēšana: Dziļas un sarakstītas struktūras — tostarp masīvi ar objektiem vai sarakstīti masīvi — tiek rekursīvi apstrādātas, lai ģenerētu ligzdotas shēmas definīcijas.
  4. Tipu atvasināšana un apvienošana: Katram īpašumam vai masīva elementam tiek noteikti tipi. Ja elementi vai īpašības satur dažādus tipus, 'type' norāda kā masīvu (savienojuma tips) pēc JSON shēmas specifikācijas.
  5. Obligāto un izvēles noteikšana: Analizējot visus objektus katrā līmenī, rīks atšķir vienmēr esošos (obligātos) un reizēm trūkstošos (izvēles) atslēgas.
  6. Vērtību ierobežojumi: Kur iespējams, rīks atvasina enumerācijas (atļauto vērtību kopu), min/max skaitļiem, minLength/maxLength virknei un formāta norādes (piemēram, 'email', 'uri' vai 'date-time').
  7. Īpašo gadījumu apstrāde: Pievērš īpašu uzmanību tukšiem masīviem, null vērtībām un neregulārām struktūrām — nodrošinot derīgas shēmas, kas atbilst reālām datu variācijām.
  8. Shēmas sintēze: Gala shēma tiek izlaista kā standartiem atbilstošs Draft-07 dokuments — gatavs lietošanai ar tādiem rīkiem kā Ajv, OpenAPI vai koda ģenerēšanas bibliotēkām.

Kāpēc ģenerēt JSON shēmu? Praktiskās pielietošanas iespējas

  • Automātiska validācija: Izmantojiet ģenerētās shēmas, lai nodrošinātu datu līgumu izpildi un pārbaudītu ienākošos datus jūsu API, mikropakalpojumos vai komandrindas rīkos.
  • API dokumentācija: Automātiski ģenerējiet dokumentāciju un interaktīvos pārlūkus (Swagger, Postman) ar precīzām datu definīcijām.
  • Koda ģenerēšana: Izveidojiet tipdrošus modeļus vai validētājus TypeScript, Python, Java un citās valodās, izmantojot shēmu kā vienīgo patiesības avotu.
  • Testa datu ģenerēšana: Rīki kā JSON Schema Faker vai Mockaroo izmanto shēmas, lai sintezētu reālistiskus testēšanas datus kvalitātes nodrošināšanai un slodzes testēšanai.
  • Pārbūve un migrācija: Validējiet vecās vai mainīgās datu struktūras, nodrošinot saderību attīstoties jūsu aizmugures sistēmai.

Tehniskās funkcijas

  • Draft-07 saderība maksimālai savietojamībai ar galvenajiem validatoriem un API izstrādes platformām.
  • Rekursīva analīze jebkuram ligzdošanas dziļumam — masīvi masīvos, objekti masīvos un citi.
  • Precīza savienojuma tipu ('type' masīva) noteikšana laukiem vai elementiem, kas mainās starp paraugiem.
  • Automātiska enumerāciju, garuma, rakstura, formāta, min/max un citu ierobežojumu atpazīšana.
  • Eksplīcīta null vērtību, tukšu masīvu/objektu un daļēju ierakstu atbalsts.
  • Shēmas ģenerēšana notiek pilnībā pārlūkprogrammā. Jūsu ievades JSON nekad neatstāj ierīci.

Tehnisks piemērs: no JSON parauga līdz Draft-07 shēmai

JSON parauga ievade
{
  "transaction": {
    "id": "txn_abc123",
    "amount": 99.95,
    "currency": "USD",
    "status": "completed",
    "meta": {
      "ip": "203.0.113.1",
      "tags": ["recurring", null]
    }
  },
  "refunded": false,
  "notes": null
}
Ģenerētā JSON shēmas izvade
{
  "$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"]
}

Kā lietot šo JSON uz JSON shēmas rīku

  1. Ielīmējiet vai ierakstiet savu JSON paraugu redaktorā zemāk. Rīks pieņem jebkuru derīgu JSON, no vienkāršiem objektiem līdz dziļi ligzdotām struktūrām.
  2. Nospiediet 'Ģenerēt JSON shēmu', lai izveidotu un aplūkotu rezultātā iegūto JSON shēmu.
  3. Kopējiet, rediģējiet vai lejupielādējiet shēmu. Integrējiet to tieši savos API aprakstos, validācijas kodā vai dokumentācijā.

Kodu piemēri JSON pārveidei par shēmu

Skatiet, kā ģenerēt JSON shēmu no JSON dažādās programmēšanas valodās.

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.