1 个不稳定版本
0.1.0 | 2019年9月11日 |
---|
#2092 在 数据库接口
22KB
372 行
jddf-infer
jddf-infer
从示例值生成 JDDF 架构。当您想快速构建架构的框架时,只需使用示例数据,它非常有用。
用法
请参阅 jddf-infer --help
获取详细说明,但基本用法如下
$ echo '{"name": "John", "born": "1971-10-19T17:26:48+00:00"}' | jddf-infer
{"properties":{"born":{"type":"timestamp"},"name":{"type":"string"}}}
默认情况下,jddf-infer
从 STDIN 读取示例值,然后生成推断的架构输出到 STDOUT。要使用文件而不是 STDIN,您可以这样调用 jddf-infer
jddf-infer examples.jsonl
jddf-infer
需要其输入为有限序列的 JSON Lines -- 一行 JSON 值,由换行符分隔。基本上,这意味着输入看起来应该像这样
{ "a": "foo" }
123
"asdf"
[1, 2, 3]
提供提示
为了使默认输出可预测且有用,jddf-infer
默认情况下永远不会输出 "values" 或 "discriminator" 形式,因为这需要一些启发式方法来区分这些形式与更常见的 "properties" 形式。
为了避免这种行为,jddf-infer
提供了两个标志,可以多次传递
--values-hint=<json pointer>
接受一个指向输入中应推断为 "values" 形式的路径的 JSON Pointer。--discriminator-hint=<json pointer>
接受一个 JSON Pointer,它指向输入中应推断为 "discriminator" 形式的 "tag"。
在这两种情况下,如果提示被证明是错误的(例如,如果它指向不存在的路径,或者示例值与提示相矛盾),则忽略该提示。
要传递关于数组元素的提示,请使用 -
作为数组索引。
所有这些都最好通过示例来解释。默认情况下,如果您给 jddf-infer
如下输入
{ "stuff": { "a": "foo", "b": "bar" }}
它将推断出 "properties" 形式
$ echo '{ "stuff": { "a": "foo", "b": "bar" }}' | jddf-infer
{"properties":{"stuff":{"properties":{"a":{"type":"string"},"b":{"type":"string"}}}}}
但是,您可以通过传递 --values-hint
来强制将 /stuff
下的对象视为 "values" 形式
$ echo '{ "stuff": { "a": "foo", "b": "bar" }}' | jddf-infer --values-hint=/stuff
{"properties":{"stuff":{"values":{"type":"string"}}}}
同样,假设您有一个包含以下值的文件
{ "stuff": { "arrayOf": "strings", "array": ["a", "b", "c"]}}
{ "stuff": { "arrayOf": "numbers", "array": [1, 2, 3]}}
{ "stuff": { "arrayOf": "booleans", "array": [true, false, true]}}
默认情况下,jddf-infer
将推断以下架构
$ cat examples.jsonl | jddf-infer
{"properties":{"stuff":{"properties":{"array":{"elements":{}},"arrayOf":{"type":"string"}}}}}
但是,如果您想让 jddf-infer
将 /stuff
作为区分器表单处理,其中 /stuff/arrayOf
是区分器标记,那么请提供一个指向 --discriminator-hint
的引用,指向 /stuff/arrayOf
$ echo examples.jsonl | jddf-infer --discriminator-hint=/stuff/arrayOf | jq
{
"properties": {
"stuff": {
"discriminator": {
"tag": "arrayOf",
"mapping": {
"numbers": {
"properties": {
"array": {
"elements": {
"type": "uint8"
}
}
}
},
"strings": {
"properties": {
"array": {
"elements": {
"type": "string"
}
}
}
},
"booleans": {
"properties": {
"array": {
"elements": {
"type": "boolean"
}
}
}
}
}
}
}
}
}
依赖项
~3–4.5MB
~73K SLoC