3 个版本
0.2.3 | 2021 年 6 月 14 日 |
---|---|
0.2.2 | 2021 年 5 月 25 日 |
0.2.1 | 2021 年 5 月 25 日 |
0.2.0 |
|
946 在 开发工具
每月 24 次下载
80KB
1.5K SLoC
JSON 生成器
简单的控制台工具,根据提供的示例生成 JSON 对象,包含组成 JSON 主体的一组定义生成新对象逻辑的函数。
该工具允许将生成的 JSON 发送到不同的来源,如 HTTP 服务器、文件夹、文件或控制台。
内容
总体
给定模板
{
"description": "the example how to create a json template to generate new jsons",
"note": "the prefix | in a field name signals that the field carries a function to generate data.",
"record": {
"|type": "str_from_list(business,technical,analytical)",
"technical":{
"|id": "uuid()",
"|index": "seq()",
"|updated_tm": "dt()",
"|created_tm": "dt(%Y-%m-%d %H:%M:%S)"
},
"|is_active": "bool()",
"|name": "str(10,customer)",
"|email": "str(5,,@gmail.com)",
"|code": "str(5,,'(code)')",
"|dsc": "str(20)",
"geo": {
"|country": "str_from_file(jsons/countries,,)",
"|city": "str_from_file(jsons/cities,'\n')",
"|street": "str(10,,-street)",
"|house": "int(1,1000)"
},
"|id_parent": "int_from_list(1,2,3,4,5,6,7)",
"|related_records": "int(1,1000) -> array(5)"
}
}
生成的 json
{
"description": "the example how to create a json template to generate new jsons",
"note": "the prefix | in a field name signals that the field carries a function to generate data.",
"record": {
"code": "Upaz2(code)",
"dsc": "gLgvDinPZg1aMu9LpPyp",
"email": "[email protected]",
"geo": {
"city": "Rome",
"country": "Australia",
"house": 770,
"street": "7Ke4CAHWpk-street"
},
"id_parent": 7,
"is_active": false,
"name": "customerXgKChm5t2b",
"related_records": [
263,
489,
390,
226,
361
],
"technical": {
"created_tm": "2021-05-23 13:09:27",
"id": "339b0ca7-0e00-4d6e-8073-d270d7d56e2e",
"index": 1,
"updated_tm": "2021-05-23 13:09:27"
},
"type": "analytical"
}
}
规则
总的来说,如果字段没有特定的前缀,表示该字段包含生成器函数,则字段的值将被取回并返回到结果中。否则,如果字段名称中包含前缀,则期望值是一个字符串,描述生成值的函数。默认前缀如示例中所示为 |
{
"|dynamic_field_with_generator": "seq()",
"static_field": "constant"
}
**注意:如果前缀符号干扰了其他任何字段,则可以将其更改为其他任何字符。
生成器
每个生成器都有以下语法:生成器名称 ( arg1, arg2, ..)
如果生成器包含另一个生成器,则语法会获得额外的元素:内部生成器 (arg1, arg2, .. ) -> 包含生成器 (arg1, arg2, ..)
生成器可以具有空参数: str(10,,postfix)
字符串字面量可以直接作为参数放置,或者用单引号括起来: str(10,literal,'with quotes')
生成器列表
生成器 | 参数=默认值 | 描述 | 示例 |
---|---|---|---|
seq | 起始点=0,步长=1 | 顺序增加的数字行(1,2,3,4 ...) | seq() / seq(10,2) / seq(,2) |
bool | 生成的布尔值 | bool() | |
str | 行大小=0,前缀='',后缀='' | 由随机字母和数字组成的行,具有预定义长度、前缀和后缀 | str() / str(10) / str(,prefix,) / str(,,'suffix') / str(10,abc,cde) |
int | 下限=0 和上限=1000 | 位于预定义范围内的随机数 | int() / int(1,100) / int(1) / int(,10) |
str_from_list | 值列表 | 字符串列表 | str_from_list(a,'b',c,d) |
int_from_list | 值列表 | 数字列表 | int_from_list(1,2,3,4,5) |
str_from_file | 文件路径,分隔符=',' | 从预定义文件中提取的字符串列表:注意,分隔符可以省略,默认分隔符(,)将被使用 | str_from_file(\home\user\json) str_from_file(\home\user\json,;) str_from_file(\home\user\json,\n) |
int_from_file | 文件路径,分隔符=',' | 从预定义文件中提取的数字列表:注意,分隔符可以省略,默认分隔符(,)将被使用 | int_from_file(c:\user\json) |
uuid | 生成的UUID | uuid() | |
dt | 格式=%Y-%m-%d %H:%M:%S | 当前日期和时间。 | dt(%Y-%m-%d)/dt() |
array | func_to_generate -> array(number=1) | 获取填充数组的生成器。 | int(1) -> array() |
如何使用
从控制台
cargo install json-gen
json-gen -f "file path" -r 10 --pretty --logs --to-folder folder --to-curl '-X POST ip'
命令行参数
短 | 长 | 描述 | 示例 |
---|---|---|---|
b | 正文 | 文本表示JSON模板 | --body | -b '{"k":"v"}' |
f | 文件 | 包括JSON模板的文件路径 | --file | -f c:\folder\json.json |
r | 重复 | 重复次数 | --repeat | -r 10 |
i | 指示器 | 指示字段包含生成函数。 | --indicator | -i > |
pretty | 插入格式化符号以获得可读的JSON | --pretty | |
logs | 打印日志 | --logs | |
to-console | 在控制台中显示JSON(默认情况下,如果输出数组为空) | --to-console | |
to-file | 将生成的JSON追加到文件中。如果文件不存在,则创建一个新的文件。文件夹应该存在。 | --to-file c:\folder\jsons.json | |
to-folder | 创建新文件并将其放置到所选文件夹中。如果不存在,则创建文件夹。 | --to-file c:\folder | |
to-curl | 使用curl将JSON发送到服务器。实际上,将添加-d。 | --to-curl "-H Content-Type:application/json -X POST 127.0.0.1:7878" | |
h | help | 有关命令的信息 | -h | --help |
V | 版本 | 版本 | -V | --version |
注意:使用--to-curl参数的系统需要安装curl实用程序。
从依赖项
json-gen="*"
use json_generator::json_template::JsonTemplate;
use json_generator::generate;
use serde_json::Value;
fn main() {
let json_template:&str = "{\"|id\":\"seq()\"}";
let mut json_template = JsonTemplate::from_str(json_template, "|").unwrap();
let generated_value:Vec<Value> = generate(&mut json_template,10,true,&mut vec![]);
}
发送者
函数generate获取最后一个参数,它是一个发送者数组。本质上,发送者是实现sender trait的结构体。
pub trait Sender {
fn send(&mut self, json: &Value, pretty: bool) -> Result<String, GenError>;
}
简单实现的示例
use json_generator::sender::{Sender, ConsoleSender, string_from};
use serde_json::Value;
impl Sender for ConsoleSender {
fn send(&mut self, json: &Value, pretty: bool) -> Result<String, GenError> {
println!("{}", string_from(json, pretty)?);
Ok("the item has been sent to the console".to_string())
}
}
GenError
默认情况下,所有内容都包裹在Gen(erator)Error中,这是处理错误的一般结构。
一般来说,它具有以下内容
#[derive(Debug)]
pub struct GenError {
reason: String,
tpe: GenErrorType,
}
#[derive(Debug)]
pub enum GenErrorType {
Parser,
Sender,
Generator,
Common,
}
并提供以下方法进行操作
impl GenError {
pub fn new_with(reason: &str) -> Self {..}
pub fn new_with_in_parser(reason: &str) -> Self {..}
pub fn new_with_in_sender(reason: &str) -> Self {..}
pub fn new_with_in_generator(reason: &str) -> Self {..}
}
依赖关系
~13–21MB
~316K SLoC