24 个版本
0.3.5 | 2024 年 6 月 18 日 |
---|---|
0.3.4 | 2024 年 2 月 26 日 |
0.3.3 | 2023 年 12 月 9 日 |
0.3.2 | 2023 年 10 月 13 日 |
0.1.13 | 2023 年 7 月 17 日 |
#88 在 命令行工具
1,272 每月下载量
26KB
508 代码行
schermz
一个从 JSON 文件创建模式的 CLI 工具。
安装
此工具是用 Rust 编写的,因此您需要安装 Rust 工具链 以构建它。
cargo install schermz
用法
A tool to generate a schema for a given JSON file.
Usage: schermz [OPTIONS] --file <FILE>
Options:
-f, --file <FILE> Path to the JSON file
-m, --merge-objects Whether to merge object types into one
-h, --help Print help
-V, --version Print version
-m
参数
当将此参数传递给 schermz 时,相同键的所有对象将合并为一个,这意味着如果键可以有多个不同的对象形状,它们将不会单独列出。当您想了解数据的一般概念或您信任数据的一致性时,这很有用。
以下是一个简单的示例
sample.json
[
{
"info": {
"name": "Martin",
"age": 30
}
},
{
"info": {
"name": "Paul"
}
}
]
没有 -m
schermz -f ./sample.json
{
"info": {
"types": [
{
"age": {
"types": [
"NUMBER"
]
},
"name": {
"types": [
"STRING(6)"
]
}
},
{
"name": {
"types": [
"STRING(4)"
]
}
}
]
}
}
有 -m
schermz -m -f ./sample.json
{
"info": {
"types": [
{
"age": {
"types": [
"NUMBER"
]
},
"name": {
"types": [
"STRING(4, 6)"
]
}
}
]
}
}
输出
字符串值根据其可能的长度进行分析。
STRING(0, 10)
- 此字段是一个字符串,最小长度为 0(""
)和最大长度为 10。STRING(5)
- 此字段是一个长度为 5 的字符串。
示例
sample.json
[
{
"name": "Sherlock Holmes",
"title": "",
"age": 34,
"personal_data": {
"gender": "male",
"marital_status": "single"
},
"address": {
"street": "10 Downing Street",
"city": "London",
"zip": "12345",
"country_code": "UK"
},
"phones": ["+44 1234567", "+44 2345678", 12311, { "mobile": "+44 3456789" }]
},
{
"name": "Tony Soprano",
"title": "",
"age": 39,
"personal_data": {
"gender": "male",
"marital_status": "married"
},
"address": {
"street": "14 Aspen Drive",
"city": "Caldwell",
"zip": "NJ 07006",
"country": "USA",
"state": "New Jersey",
"country_code": "US"
},
"phones": [
"+1 1234567",
"+1 2345678",
"+1 11111111111",
"+1 301234566",
11224234,
{ "mobile": "+1 3456789" }
]
},
{
"name": "Angela Merkel",
"title": "",
"age": 65,
"personal_data": {
"gender": "female",
"marital_status": "married"
},
"address": {
"street": "Gr. Weg 3",
"city": "Potsdam",
"zip": "14467",
"country": "Germany",
"state": "Brandenburg"
},
"phones": [
"+49 1234222567",
"+49 2343231678",
"+49 1111131111111",
"+49 301212334566",
9999222,
{ "mobile": "+49 343156789", "fax": "+49 343156780" }
]
},
{
"name": "Jane Doe",
"title": "Dr.",
"age": "73",
"personal_data": {
"gender": "female"
},
"address": null,
"phones": null
}
]
schermz -f ./sample.json
{
"address": {
"types": [
"NULL",
{
"city": {
"types": ["STRING(6)"]
},
"country_code": {
"types": ["STRING(2)"]
},
"street": {
"types": ["STRING(17)"]
},
"zip": {
"types": ["STRING(5)"]
}
},
{
"city": {
"types": ["STRING(8)"]
},
"country": {
"types": ["STRING(3)"]
},
"country_code": {
"types": ["STRING(2)"]
},
"state": {
"types": ["STRING(10)"]
},
"street": {
"types": ["STRING(14)"]
},
"zip": {
"types": ["STRING(8)"]
}
},
{
"city": {
"types": ["STRING(7)"]
},
"country": {
"types": ["STRING(7)"]
},
"state": {
"types": ["STRING(11)"]
},
"street": {
"types": ["STRING(9)"]
},
"zip": {
"types": ["STRING(5)"]
}
}
]
},
"age": {
"types": ["NUMBER", "STRING(2)"]
},
"name": {
"types": ["STRING(8, 15)"]
},
"personal_data": {
"types": [
{
"gender": {
"types": ["STRING(4, 6)"]
},
"marital_status": {
"types": ["STRING(6, 7)"]
}
},
{
"gender": {
"types": ["STRING(6)"]
}
}
]
},
"phones": {
"types": [
"NULL",
{
"ARRAY": [
{
"mobile": {
"types": ["STRING(10, 11)"]
}
},
{
"fax": {
"types": ["STRING(13)"]
},
"mobile": {
"types": ["STRING(13)"]
}
},
"NUMBER",
"STRING(10, 17)"
]
}
]
},
"title": {
"types": ["STRING(0, 3)"]
}
}
依赖关系
~2–3MB
~60K SLoC