線上 JSON 轉 JSON 架構產生器

於瞬間、以安全且免費方式,從真實 JSON 生成強固、符合標準的 JSON 架構。

本工具可從 JSON 範例生成準確反映其結構、資料類型及限制的 JSON Schema Draft-07 文件。所有處理都是在您的瀏覽器中執行,確保完全隱私,資料不會被上傳或儲存。非常適合 API 文件撰寫、驗證及程式碼產生。

以下轉換 JSON 為 JSON 架構

架構生成背後的運作原理

從範例 JSON 生成 JSON 架構,不只是將欄位對應成類型。本工具採用多個關鍵步驟以確保正確和完整:

  1. 解析:工具根據 ECMA-404 規範解析您的 JSON,並為格式錯誤或模糊結構提供詳細錯誤回報。
  2. 結構分析:建立資料的樹狀表示,依 JSON Schema 的核心類型(物件、陣列、字串、數字、整數、布林值、null)分類每個屬性與元素。
  3. 遞迴遍歷:針對深度及巢狀結構—包含物件陣列或巢狀陣列—做遞迴遍歷以生成巢狀架構定義。
  4. 類型推論與合併:對每個屬性或陣列元素進行類型推論。若屬性或項目有多種類型,根據 JSON Schema 規範以陣列(聯合類型)表示 'type'。
  5. 必填與選填偵測:透過分析各層級所有物件,區分總是存在(必填)及偶爾缺失(選填)的鍵值。
  6. 值限制:盡可能推論枚舉(允許值集合)、數值最小/最大、字串長度限制及格式提示(如 'email'、'uri'、'date-time')。
  7. 邊緣情況處理:特別處理空陣列、null 值及稀疏結構,確保生成符合真實世界變異的有效架構。
  8. 架構綜合:最終產生一份符標準的 Draft-07 文件,方便用於 Ajv、OpenAPI 或程式碼生成庫。

為什麼要生成 JSON 架構?實務應用

  • 自動驗證:利用產生的架構,強制資料契約並驗證 API、微服務或 CLI 的進入資料。
  • API 文件:自動產生文件及互動檢視器(Swagger、Postman),呈現精準資料定義。
  • 程式碼生成:以架構作為單一真相來源,生成 TypeScript、Python、Java 等語言的型別安全模型或驗證器。
  • 測試資料生成:JSON Schema Faker、Mockaroo 等工具使用架構來合成逼真模擬資料,進行 QA 與負載測試。
  • 重構與遷移:驗證舊有或變更中的資料結構,確保後端演進的相容性。

技術特性

  • 相容於 Draft-07,確保與主要驗證器及 API 設計平台高度互通。
  • 支援任意深度的遞迴分析—包括巢狀陣列中的陣列、物件中的陣列等情況。
  • 對於跨範例有不同類型的欄位或項目,準確推論聯合類型('type' 陣列)。
  • 自動偵測枚舉、長度、模式、格式、最小/最大值及其他常見限制。
  • 明確支援 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 Schema。

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.