问题标签 [ajv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3720 浏览

json - 在 JSON 模式中使用对象属性键作为枚举

我正在尝试使用 JSON Schema 验证 JSON 文件,以查找“损坏的引用”的情况。基本上我的文件由项目和组组成,每个项目属于由 groups 属性键引用的单个组,如下所示:

在上面的示例中,该项目cheese被视为无效,因为dairy该对象中没有属性groups。我尝试使用以下架构对此进行验证:

这具有enumforgroup由 中的属性值填充的效果groups,但我想要做的是使用 中定义的属性groups

如果我添加一个像 eg 这样的属性groupIds,让它成为一个包含所有属性键的数组,groups并指定枚举,因为"$data": "/groupIds"它确实有效,所以我认为这是一个 JSON 指针问题。

JSON Schema 中的enum 关键字定义为:

这个关键字的值必须是一个数组。这个数组应该至少有一个元素。数组中的元素应该是唯一的。

因此,如果我只能获取 JSON 指针来引用对象的键而不是其值,我猜枚举验证会起作用。我在想类似或类似的东西"$data": "/groups/.keys""$data": "/groups/$keys"但在谷歌搜索或阅读规范时没有找到它。有没有这样的事情或曾经提出过?

0 投票
1 回答
697 浏览

javascript - 如何使用 AJV 获取当前/编译模式?

这个问题与ajv有关。

如何获得正在验证的架构?

例如

在您告诉我只放入{...options.schema, $async: true}变量之前,请记住可以加载远程模式——我想要具有所有规则和属性的完全解析模式。大概所有的子模式都errResult可以计算之前加载 - 那么它存储在哪里以及如何访问它?

0 投票
1 回答
126 浏览

ajv - 防止 AJV 改变对象

每当我们传递输入进行验证时,AJV 都会输出经过验证的输入。但它会改变原始输入。有没有办法防止这种情况?

0 投票
0 回答
427 浏览

javascript - 使用 ajv-keywords 的“未捕获的错误:如果已定义关键字”

我正在尝试使用ajv-keywords中的 if / then / else 关键字创建条件验证,但是我在浏览器控制台中收到以下错误:“未捕获的错误:关键字 if 已定义”。

我究竟做错了什么?

0 投票
1 回答
1626 浏览

javascript - Ajv 关键字和自定义错误消息

我已经编写了一个模式,但它似乎并没有像我预期的那样进行验证。我假设我的模式语法有问题,但无法弄清楚。我希望在筹款活动完成之前不会看到标题或目标的错误消息,因为只有在筹款活动完成时才需要它们。我尝试了很多组合,但没有一个按预期工作,这两个是我最接近我需要的。

模式尝试一:显示 4 条错误消息、3 条必需错误和 1 条错误,说明数据应与“then”模式匹配。

模式尝试二:显示 2 条错误消息,1 条必需的错误和 1 条错误说数据应该匹配正确的“then”模式,但是当我完成筹款活动时,有效变为真,这是我希望看到标题和目标所需的错误的时候。我定义的自定义错误消息也没有错误。

我很确定我的架构有问题,但是从文档中不清楚如何使用 if/then 与使用 ajv-errors 的自定义错误消息结合使用。任何帮助将不胜感激!谢谢!

0 投票
1 回答
392 浏览

json - JSON-Schema 类型和值依赖关系

是否可以根据另一个字段的值更改字段的架构?

注意:我正在使用Ajv

使用Joi(非 JSON 模式验证器)的示例:

0 投票
2 回答
1810 浏览

javascript - fastify 和 ajv 模式验证

我正在尝试验证查询字符串参数“hccid”,如下所示。似乎验证对我不起作用。有人可以看到我缺少什么吗?

因此,使用该代码,当我使用全新的查询参数调用服务时,我应该得到一个模式验证异常,abc如下所示

但没有错误。我得到了回复{"hello":"world"}

我还尝试一起删除查询参数http://localhost:3000/hello

我仍然得到{"hello":"world"}

所以显然验证不起作用。我的代码中缺少什么?任何帮助,将不胜感激。

0 投票
3 回答
3321 浏览

javascript - JSON Schema 提取必填字段

我需要从 JSON-Schema+Data 中获取所需字段的列表。

目前,我们正在使用AJV通过 JSON Schema 在表单中获取错误消息,并且效果很好。

我需要一种方法来获取所有必填字段(即使已填写),以便用 * 将这些字段标记为“必填”。必填字段可能会根据架构和数据组合而变化。

还尝试破解tv4以提取必填字段,但未成功。

请帮忙。


此类架构的示例:

0 投票
1 回答
929 浏览

json - JSON-Schema:在 $ref 中使用相对 URL

我在使用通过相对 URL 引用子架构的父架构时遇到问题。

这是我的父架构:

这是我的子架构:

这是我的数据:

这是我得到的错误ajv-cli

$ ajv -s parent.json -d parent-test.json

架构 parent.json 无效

错误:无法从 id 解析引用 child.json#

我在其他 3 个验证器中遇到了类似的错误(child.json无法解决),这表明我的架构不正确。

我究竟做错了什么?

0 投票
1 回答
490 浏览

javascript - 使用带有 jsonschema 的负面回溯

我正在使用节点 9.2.0 和 ajv 6.0.0。

我有一个模式,我希望在其上使用否定的lookbehind,它的定义如下:

但是,似乎当我尝试使用以下数据通过 AJV 验证这一点时:{"id": 123, "title": "world exclusive"}我没有收到验证错误。

编码:

数据在哪里:{"id": 123, "title": "world exclusive"}. 我希望这会出错,但它目前告诉我数据是有效的。