#json-schema #json-input #generation #generate #command-line-tool #infer #synthetic

bin+lib drivel

从 JSON 输入中推断模式,并基于推断的模式生成合成数据

19 个版本

0.2.2 2024年7月4日
0.2.1 2024年6月16日
0.2.0 2024年4月26日
0.1.15 2024年4月4日

#1 in #infer

每月下载量42

MIT 许可证

65KB
1.5K SLoC

drivel

drivel 是一个用 Rust 编写的命令行工具,可以从示例 JSON(或 JSON 行)文件中推断模式,并基于推断的模式生成合成数据(即所谓的 "drivel")。

功能

  • 模式推断:drivel 可以分析 JSON 输入并推断其模式,包括数据类型、数组长度和对象结构。
  • 数据生成:基于推断的模式,drivel 可以生成符合推断结构的合成数据。
  • 易于集成:drivel 从 stdin 读取 JSON 输入并将输出写入 stdout,允许轻松集成到管道和工作流程中。

安装

每个版本都提供了二进制文件和基于 shell 的安装程序。

要通过 Cargo 安装 drivel 可执行文件,请确保您已安装 Rust 工具链,然后运行

cargo install drivel

要将 drivel 作为项目依赖项添加,例如使用模式推断引擎,请运行

cargo add drivel

使用方法

Infer a schema from JSON input, and generate synthetic data based on the inferred schema.

Usage: drivel [OPTIONS] <COMMAND>

Commands:
  describe  Describe the inferred schema for the input data
  produce   Produce synthetic data adhering to the inferred schema
  help      Print this message or the help of the given subcommand(s)

Options:
      --infer-enum                     Infer that some string fields are enums based on the number of unique values seen
      --enum-max-uniq <ENUM_MAX_UNIQ>  The maximum ratio of unique values to total values for a field to be considered an enum. Default = 0.1
      --enum-min-n <ENUM_MIN_N>        The minimum number of strings to consider when inferring enums. Default = 1
  -h, --help                           Print help
  -V, --version                        Print version

示例

考虑一个 JSON 文件 input.json

{
  "name": "John Doe",
  "id": "0e3a99a5-0201-4444-9ab1-8343fac56233",
  "age": 30,
  "is_student": false,
  "grades": [85, 90, 78],
  "address": {
    "city": "New York",
    "zip_code": "10001"
  }
}

在 'describe' 模式下运行 drivel

cat input.json | drivel describe

输出

{
  "age": int (30),
  "address": {
    "city": string (8),
    "zip_code": string (5)
  },
  "is_student": boolean,
  "grades": [
    int (78-90)
  ] (3),
  "name": string (8),
  "id": string (uuid)
}

在 'produce' 模式下运行 drivel

cat input.json | drivel produce -n 3

输出

[
  {
    "address": {
      "city": "o oowrYN",
      "zip_code": "01110"
    },
    "age": 30,
    "grades": [83, 88, 88],
    "is_student": true,
    "name": "nJ heo D",
    "id": "9e0a7687-800d-404b-835f-e7d803b60380"
  },
  {
    "address": {
      "city": "oro wwNN",
      "zip_code": "11000"
    },
    "age": 30,
    "grades": [83, 88, 89],
    "is_student": false,
    "name": "oeoooeeh",
    "id": "c6884c6b-4f6a-4788-a048-e749ec30793d"
  },
  {
    "address": {
      "city": "orww ok ",
      "zip_code": "00010"
    },
    "age": 30,
    "grades": [85, 90, 86],
    "is_student": false,
    "name": "ehnDoJDo",
    "id": "71884608-2760-4853-8c12-e11149c642cd"
  }
]

贡献

我们欢迎任何对改进或扩展 drivel 感兴趣的人的贡献!无论您是否有新功能、错误修复或对文档的改进的想法,请随时打开一个问题或提交一个拉取请求。

许可证

此项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

依赖关系

~13MB
~269K SLoC