问题标签 [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.
node.js - 节点 AJV 验证模式
使用 6.5 版
我的问题是我有一个请求对象,该对象必须包含一个属性,并且应该包含属性列表中的一个且仅包含一个其他属性,或者没有那些指定的属性。我已经进行了一些挖掘,但无法找到解决此问题的方法。
可能的有效请求:
无效的请求是:
或者
等等
我想出的最好的 ajv 验证器对象如下:
但我知道这不会随着我们应用程序的增长而扩展。我想知道是否有办法指定对象需要“查询”和“限制”、“计数”、“最大值”的 ONE 或 NONE。
json - 用于验证属性名称是否与嵌套值匹配的 JSON 模式
我们使用 JSON 来存储一些配置设置。例如:
如您所见,源名称是可变的,并且为了方便在属性下的对象内部重复name
。
我们目前正在使用 JSON 模式验证这一点,如下所示:
有没有办法要求属性名称与使用 JSON 模式的值匹配?换句话说,有没有办法确保以下示例无法验证?
jsonschema - 使用 json-schema 来要求或禁止基于另一个属性值的属性?
我要在 json-schema 中完成的工作:当属性enabled
为时true
,应该需要某些其他属性。当 时false
,这些属性应该被禁止。
这是我的 json 模式:
使用ajv
版本 6.5 进行验证count
,无论enabled
. 例如,对于数据:
我的验证错误是:
如何使用 json-schema 完成此操作draft-7
?
请注意,此问题类似于,但要求比:
jsonSchema attribute conditionally required更严格。
javascript - 如何选择 node_modules dist 风格与 webpack 捆绑
问题:
在我将 AJV.js 升级到版本 6.4 后,我的供应商捆绑包包含“uri-js”ESNEXT 版本,而不是破坏 IE11 兼容性的 ES5 版本。
分析:
我认为 AJV 通过require('uri-js')
调用引用 uri-js,并且uri-js有两种风格:
/node_modules/uri-js/dist/:
- es5
- 下一个
出于某种原因,Webpack (V 4.8) 将 uri-js 的“esnext”风格捆绑到我的供应商捆绑包中,而不是使用“es5”。我找不到我必须如何/在哪里指定我的首选构建目标。
这是我的 webpack.config.js:
包.json:
我知道我自己的代码使用 TypeScript (V 2.8) 编译器被转译为 ES5。但是 node_modules 呢?尤其是已经在他们的 dist 文件夹中发布了 ES5 版本的那个?
万一这很重要,我的 tsconfig.json:
我还考虑过包含 Babel 以将所有 node_modules 降级到 ES5,但这对我来说听起来有点矫枉过正,特别是因为模块已经包含 ES5 风格。
问题:
我可以指定我喜欢 ES5 版本的
dist
文件夹node_modules
吗?也许在我的 webpack.config 或package.json
?如何选择正确的
node_modules/.../dist/
文件夹?
jsonschema - JSON Schema draft 07 if then statements for conditional validation
I'm trying to create a schema that has a slightly different structure depending upon values and decided to use draft 07 and ajv to validate it. The structure I'm trying to create is as follows -
of this, pattern is required, and certain kwargs
objects will have other required keys. I tried using a series of if..then statements combined with a reference as follows :
the required pattern constraint works, the required function constraint does not.
I even tried wrapping up all of the if-then statements into an allOf array, with each set of if-then inside one object, but it doesn't seem to work.
the reference currently looks like this
javascript - 将值传递给 Json 模式定义
我在 NodeJS 上使用 AJV Schema 验证器,并希望将userID
from添加sessionObject
到每个传入的有效负载中,以便我可以userID
为每个事务存储。
我想知道这是否可以在 json 模式中完成。
示例传入客户端有效负载 -
所需对象发布架构验证 -
由于传入的有效负载很大,我相信最好在模式验证点进行分配,而不是在我的应用程序内部进行递归操作。我愿意接受建议。谢谢
javascript - 如何解析 JsonSchema 并将子模式移动到根?
我用 JavaScript 编写了一个模式,因为它更容易,我可以简单地运行它来将其转换为JSON。
这部分很好,但现在我想提取一个子模式/定义,因为我想使用它的应用程序不会让我为我感兴趣的子模式指定 JSON 路径。
所以我试着写一个小脚本把它拉出来:
但我得到的是:
即,我丢失了其他定义!
AJV 中是否有一些 API 方法可以在不破坏所有 $refs 的情况下提取子模式?
jsonschema - 使用 ajv 保证数组中特定索引处的值类型
我正在尝试使用 ajv 来保证数组遵守关于什么是有效值的严格规则。我不确定要使用哪些修改或其他关键字来实现我正在寻找的结果。可以使用一些见解。
注意:我有另一种工作方式,没有使用 JSONSchema 验证。我只是好奇是否可以使用 JSONSchema 验证来实现相同的目标。
规则是:
- 它可以包含任意数量的项目,我们只关心索引 0 和 1。
- 第一项,索引 0,必须是字符串。
- 第二项,索引 1,必须是一个对象。
- 如果索引 0 或 1 处的项目(无论数组的长度如何)对任一索引都有效,则在相应索引处插入另一个项目的默认值。
- 如果数组没有项目,则在适当的索引处插入两个默认值。
这是一个代码片段,希望能解释我想要完成的事情。谢谢。
node.js - 使用 AJV 在 json 模式中覆盖属性值
我有以下架构
我希望用从 dynamicDefaults 获得的值覆盖传入有效负载中的 Type 值。gettype
是一个自定义函数,它返回我的type
属性值。
我正在使用 AJV 进行模式验证。谢谢
jsonschema - 使用 Json Schema 的 AJV 修改数据
我在 NodeJs 上使用 AJV(另一个 Json 模式验证器)。
我有以下架构
我需要用unqiueID
我可以以某种方式传递给 Json 模式或 AJV 的值覆盖属性。我认为上述可以使用 AJV addKeyword 方法完成,尝试使用它但失败了,因为我不知道如何从 AJV 自定义关键字操作(和返回)数据值。是否可以使用 AJV 修改数据?或者还有其他可能的方法吗?谢谢!