Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/trassmann/schermz
Generate a schema from JSON objects
https://github.com/trassmann/schermz
cli generator json model schema
Last synced: 4 days ago
JSON representation
Generate a schema from JSON objects
- Host: GitHub
- URL: https://github.com/trassmann/schermz
- Owner: trassmann
- Created: 2023-05-14T11:55:54.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-08T10:31:52.000Z (6 months ago)
- Last Synced: 2024-05-08T11:35:47.076Z (6 months ago)
- Topics: cli, generator, json, model, schema
- Language: Rust
- Homepage: https://crates.io/crates/schermz
- Size: 62.5 KB
- Stars: 5
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# schermz
A CLI tool to create a schema from a JSON file.
## Installation
This tool is written in Rust, so you'll need to install the [Rust toolchain](https://www.rust-lang.org/tools/install) to build it.
```bash
cargo install schermz
```## Usage
```bash
A tool to generate a schema for a given JSON file.Usage: schermz [OPTIONS] --file
Options:
-f, --file Path to the JSON file
-m, --merge-objects Whether to merge object types into one
-h, --help Print help
-V, --version Print version
```## The `-m` argument
When this argument is passed to schermz, all objects for the same key will be merged into one, meaning, if a key can have multiple different object shapes, they will not be listed separately. This is useful when you want to get a general idea of the data, or you trust that the data is consistent.
Here's a simple example:
`sample.json`
```json
[
{
"info": {
"name": "Martin",
"age": 30
}
},
{
"info": {
"name": "Paul"
}
}
]
```### Without `-m` (default)
```bash
schermz -f ./sample.json{
"info": {
"types": [
{
"age": {
"types": [
"NUMBER"
]
},
"name": {
"types": [
"STRING(6)"
]
}
},
{
"name": {
"types": [
"STRING(4)"
]
}
}
]
}
}
```### With `-m`
```bash
schermz -m -f ./sample.json{
"info": {
"types": [
{
"age": {
"types": [
"NUMBER"
]
},
"name": {
"types": [
"STRING(4, 6)"
]
}
}
]
}
}```
## Output
String values are analyzed based on their possible lengths.
- `STRING(0, 10)` - This field is a string with a minimum length of 0 (`""`) and a maximum length of 10.
- `STRING(5)` - This field is a string with a length of 5.## Example
`sample.json`
```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
}
]
``````bash
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)"]
}
}```