我使用library invopop/jsonschema来生成基于go struct标记的json模式.但是我很难知道如何使用if/Then/Else属性.

我在做这样的事情

type Boulou struct {
    Name              string                   `json:"name" jsonschema:"required,minLength=1,description=unique name"`
    Transformers      []TransformerConfig `json:"transformers" jsonschema:"title=transformers,if=properties.kind.const=convert_swim,then=required[0]=convert_swim_config"`
}

但似乎不起作用(如果你想玩的话我打了go playground分).

提前谢谢!

资源:

推荐答案

在invopop/jsonschema中使用go标记并不能很好地支持这些复杂的用例.任何打破常规用例的用例,我建议实现JSONSchema()方法,以便您可以手动定义对象.按照您的示例进行操作:

type Boulou struct {
    Name              string              `json:"name"`
    Transformers      []TransformerConfig `json:"transformers"`
}

func (Boulou) JSONSchema() *jsonschema.Schema {
  props = orderedmap.New()
  props.Set("name", &jsonschema.Schema{
    Type: "string",
    Title: "Name",
  })
  props.Set("transformers", &jsonschema.Schema{
    Type: "array",
    Title: "Transformers",
    Items: &jsonschema.Schema{
      Ref:  ".....",
      If:   "properties.kind.const=convert_swim",
      Then: "required[0]=convert_swim_config",
    },
  })
  return &jsonschema.Schema{
    Type:       "object",
    Title:      "Boulou",
    Properties: props,
  }
}

我没有直接测试过这一点,但我相信您明白这一点.你需要手动计算出TransformerConfigRef是多少.

Go相关问答推荐

获取k8s群集作用域运算符的命名空间

理解Golang并发:缓冲通道的意外行为

为什么工具链指令在这种情况下没有效果?

编辑时保留YAML文件中的单引号

如何用Golang解码这个嵌套的json?

无法在32位计算机上运行Golang应用程序

将DATE类型的SQL字段扫描到GO struct 字段

golang regex基于关键字拆分字符串

我可以扫描表中每个项目的最高范围键值吗?

带有前导零的整数参数被 flag.IntVar 解析为八进制

golang gin 获取 cookie json

如何使用名称具有包名称的嵌套 struct 启动 go struct

Golang代码判断第一个词是否可以从第二个词形成

errors.Wrap 和 errors.WithMessage 有什么区别

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何在没有内存分配的情况下压缩和发布文件

如何正确为 Go 中的值设置多种类型?

递归数据 struct 解组在 Go Lang Protobuf 中给出错误无法解析无效的线格式数据

Scanner.Buffer - 最大值对自定义拆分没有影响?

将函数的值作为输入参数返回给另一个