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": "http://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
,bigserial
number
:别名:float
,double
,real
,decimal
boolean
:别名:bool
数组类型
数组类型类似于 List<T>
,其中 T 是基本类型或格式名称。
List
:别名:list
Array
:别名:array
Set
(唯一项):别名:set
对象类型
声明对象类型:field: ObjectName {field: type}
。
注意:ObjectName
应以大写字母开头。
格式
JSON Schema 格式,名称应大写开头
Date
时间
日期时间
时间戳
间隔
持续时间
Email
主机名
IPv4
IPv6
URI
主机名
Uuid
或UUID
Json
或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