3 个不稳定版本
| 新增 0.2.1 | 2024 年 8 月 14 日 |
|---|---|
| 0.2.0 | 2024 年 8 月 13 日 |
| 0.1.0 | 2024 年 8 月 12 日 |
在 命令行实用程序 中排名 675
每月下载量 327
335KB
539 行(不包括注释)
JSON Schema DSL
一个简单的 DSL,可以一行代码生成 JSON Schema。
为什么需要 JSON Schema DSL?
-
使 JSON Schema 更简洁:

-
对 AI 友好:函数调用,简单的 DSL 生成结构化输出:

-
对 CSV、Excel、Text2SQL 友好:

开始使用
CLI: cargo install json-schema-dsl
$ json-schema-dsl "User{ id: int, name: string, email: Email}"
输出如下
{
"$schema": "https://json-schema.fullstack.org.cn/draft/2020-12/schema",
"title": "User",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
}
},
"required": [
"id",
"name",
"email"
]
}
Rust 库: cargo add json-schema-dsl serde_json
fn main() {
let struct_text = "User {id: int, name: string, email: Email}";
let json_schema = json_schema_dsl::to_json_schema(struct_text).unwrap();
println!("{}", serde_json::to_string_pretty(&json_schema).unwrap());
}
语法

用户{id:int,name:string,birth_date:Date,email?:Email,tags: List<string>}
- 对象名称:以大写字母开头,例如
ObjectName { field: type }. - 字段名称:以小写字母开头。
- 可选字段:
field?: type
基本类型
JSON Schema 基本类型
string:别名:varchar,Text,String,bytes或bytea(base64)integer:别名:int,bigint,long,serial,bigserialnumber:别名:float,double,real,decimalboolean:别名:bool
数组类型
数组类型类似于 List<T>,其中 T 是基本类型或格式名称。
List:别名:listArray:别名:arraySet(唯一项):别名:set
对象类型
声明对象类型:field: ObjectName {field: type}。
注意:ObjectName 应以大写字母开头。
格式
JSON Schema 格式,名称应大写开头
Date时间日期时间时间戳间隔持续时间Email主机名IPv4IPv6URI主机名Uuid或UUIDJson或JSON:JSON 文本Xml或XML:XML 文本
其他
- 范围:
age: int(18,),age: int(,150)或age: int(1,18) - 字符串长度范围:
nick: string(6,32),varchar(32) - 数组项长度范围:
list<string>(2),list<float>(1536) - 元组:
income: [int, string] - 枚举:
enum('a', 'b', 'c')或enum(1, 2, 3) - 正则表达式:
regex('^[a-z]+$') - anyOf:
field: type1|type2,类型之间无空格 - additionalProperties:
{field: type, ...},在}前使用省略号。
参考
依赖关系
~3-4MB
~51K SLoC