在线 JSON 转 JSON 模式生成器
从真实世界的 JSON 即时、安全、免费生成强大且标准合规的 JSON 模式。
该工具基于 JSON 样本生成 JSON Schema Draft-07 文档,准确反映其结构、数据类型和约束。所有处理均在您的浏览器中完成,确保完全隐私。不上传或存储任何数据。非常适合 API 文档、验证和代码生成。
下面转换 JSON 到 JSON 模式
模式生成的核心原理
从示例 JSON 生成 JSON 模式不仅是字段到类型的映射。此工具采用几个关键步骤确保准确性和完整性:
- 解析:工具按照 ECMA-404 标准解析您的 JSON,详细报告格式错误或模糊结构。
- 结构分析:构建数据树状表示,按 JSON 模式核心类型(对象、数组、字符串、数字、整数、布尔、null)分类每个属性和元素。
- 递归遍历:递归遍历深度嵌套结构,包括对象数组和嵌套数组,生成嵌套的模式定义。
- 类型推断与合并:为每个属性或数组项推断类型;如属性或元素类型混合,则依据 JSON Schema 规范以数组形式表示“type”(联合类型)。
- 必需与可选检测:分析各层对象,区分始终存在(必需)与有时缺失(可选)的键。
- 数值约束:尽可能推断枚举(允许值集合)、数字的最小/最大值、字符串的最短/最长长度及格式提示(如“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 数组)。
- 自动检测枚举、长度、模式、格式、最小/最大值及其他常见约束。
- 明确支持 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 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.