首页 > 解决方案 > 如何使用 cuelang 对 json 文件进行验证?

问题描述

我正在评估 cuelang.org 以定义数据约束,例如在进一步处理之前对提交给 azure devops 管道的不受信任的 json 有效负载进行类型或值检查。

在针对无效数据测试我的定义时,我没有返回任何错误。

我想同时进行类型和值检查:

规则提示:


#LoggingLinuxVM: {
  resource_id:  #NonEmptyString
  version:      =~"2020-07-21"
  type:         =~"Linux"
  properties:   #LoggingPropertiesLinuxVM
}

#LoggingPropertiesLinuxVM: {
  CustomLogFiles: [...#NonEmptyString]
}

#NonEmptyString: string & !=""

无效负载(缺少类型)


{
  "resource_id": "/subscription/.../...",
  "version": "2020-07-21",
  "properties": {
    "custom_log_files": [
      "/var/log/dmesg",
      "/var/log/messages"
    ]
  }
}

尝试验证时:cue vet payload.json rules.cue我希望看到验证错误,但是没有引发任何错误并且退出状态为 0 。有没有人以类似的方式使用 cuelang 并且可以看到我哪里出错了?

标签: jsonvalidationschemacuelang

解决方案


事实证明,您必须提供 --schema 标志才能以预期的方式运行。对于此示例,如果 json 在 payload.json 中,完整的命令将是:

cue vet --schema '#LoggingLinuxVM' payload.json rules.cue


推荐阅读