问题标签 [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 回答
671 浏览

jsonschema - 使用 ajv 验证 JSON 超模式

我正在尝试使用 ajv 模块来验证一些输入。我让它与常规 JSON Schema 一起工作但我想验证多个路由并使用链接数据来构建文档,但我很困惑如何设置它。这是我的架构:

我的代码:

我的问题是,一旦我加载了我的模式,我如何告诉 ajv 链接模式以验证什么?我将有多个具有不同输入的路由(链接)进行验证。

另外,模式设置是否正确?

0 投票
1 回答
631 浏览

javascript - 使用 AJV 解决无效对象的自定义模式

我正在尝试找到一种方法来更改架构验证以找到最适合给定对象的架构。假设我们有一个模式:

现在,如果我有一个 object { "prop1": "y" },我希望它被解析为#/definitions/b类型,即使它对于这个方案并不真正有效。也就是说,我只想使用prop1属性来解决。

我想知道是否有办法使用 AJV 自定义关键字来做到这一点,而无需重建架构本身?特别是,如果模式对对象无效,是否可以使用自定义关键字来覆盖它并使其有效?

0 投票
1 回答
5327 浏览

json - JSON 模式验证 oneOf 两个或 allOf

我想验证以下 json 架构,我正在使用 Ajv npm 包。

我只想要电子邮件,或者只想要电话和国家代码,或者三个属性都应该在那里。

我尝试过 oneOf、allOf、anyOf 也尝试过嵌套主题,但在某些情况下它可以工作,而在某些情况下它不工作。

我试过以下代码

0 投票
2 回答
7056 浏览

javascript - TypeError: Ajv is not a constructor

I have this class where I try to instantiate Ajv with the new keyword and I get this error:

TypeError: Ajv is not a constructor

Code:

The console log:

enter image description here

This code used to be working and it is how Ajv is used. From the Ajv docs:

The fastest validation call:

How come I'm getting this error?

See the bottom of this for how I import the Ajv library - systemjs.config.js:

0 投票
1 回答
1001 浏览

javascript - 打字稿编译时错误

如何摆脱这个编译时打字稿错误?

app/services/jsonSchemaValidation.service.ts(8,27): 错误 TS2339: 类型 '{ (options?: Options): Ajv; 新(选项?:选项):Ajv;}'。npm 错误!测试失败。有关更多详细信息,请参见上文。

javascript代码运行没有错误,但打字稿抱怨,它阻止我能够运行我的单元测试。

这与打字无关。default由于导入问题,我通过调用来使用 Ajv 库。有关原因的详细信息,请参阅我的另一个问题

我认为有一些小技巧可以摆脱这个打字稿编译时错误,不是吗?

0 投票
1 回答
1599 浏览

jsonschema - 使用 Ajv 验证 JSON 数组中的对象

我正在尝试验证“动作”数组是否具有特定对象。每个对象都可以有自己的属性,具体取决于类型属性。动作数组可以从这些类型的对象中多次出现,而不仅仅是一次。

我的 JSON:

在此示例中,类型 = X 的对象具有所需的属性 a、b、c。数组中的对象类型 Y 具有必需的属性 d、e、f。

我正在尝试使用 switch 关键字来验证这一点:

但是我仍然无法弄清楚如何使用 switch 关键字来验证数组的对象,其中每个对象类型都由对象中的属性指定,因此可以使用属性来标识对象类型。

0 投票
1 回答
291 浏览

jsonschema - 使用 Ajv 修复错误的 JSON 值

当属性值与指定值不同时,我正在尝试修复它们。

JSON:

如果它还不是“砖”,我想将石头属性修复为“砖”。

架构:

使用 v4.11.4:

是否有任何其他关键字可用于将值基本上更改为好的值,或通过引用更改为其他值?

0 投票
1 回答
7384 浏览

javascript - AJV 自定义关键字验证

我正在使用 AJV 库来验证我的 JSON 模式。我希望能够验证Startdate为字符串。如果不是字符串,则应转换为N/A. 目前,它只转换undefinedN/A.

但是,在这些情况下,它不能按预期工作:

  • null->“空”
  • 0 --> "0"
  • 真——>“真”

如果我希望将上述所有内容转换为N/A字符串,我的 customKeyword 函数会是什么样子?

JSON响应:

架构:

添加关键字功能:

0 投票
4 回答
137423 浏览

webpack - Webpack - 关键依赖:依赖的请求是一个表达式

request在准系统 webpack 项目中导入时,我收到三个警告消息。GitHub 上提供了重现该错误的最小示例(运行npm installnpm start)。

Critical dependency: the request of a dependency is an expression

我怎样才能摆脱这个警告?


更多信息:

Webpack 尝试require静态解析调用以制作最小的捆绑包。当库在 require 调用中使用变量或表达式时(例如require('' + 'nodent')在 的这些行ajv),Webpack 无法静态解析它们并导入整个包。

我的理由是,这种动态导入在生产中是不可取的,并且代码最好保持无警告。这意味着我想要任何解决问题的解决方案。例如:

  1. 手动配置 webpack 以导入所需的库并防止出现警告。
  2. hack.js文件添加到我的项目中,以某种方式覆盖 require 调用。
  3. 升级我的图书馆。ajv-5.0.1-beta.3有一个使警告静音的修复程序。但是,如果我想使用它,我必须等到它发布,然后再har-validator发布request后续更新。如果有办法强制har-validator使用 Beta 版ajv,那将解决我的问题。
  4. 其他
0 投票
1 回答
8162 浏览

json - 基于数据的 ajv 条件模式验证

我想根据另一个字段中的数据为一个字段指定一个正则表达式模式。这可能吗?我试过 switch 和 $data 但不知道如何使用它们。例如,如果数据看起来像:

和架构看起来像:

如何根据模式中的数据设置联系模式,以便如果模式是电子邮件,它会根据电子邮件格式的正则表达式验证联系人,如果模式是电话,它会根据电话格式的正则表达式验证联系人?我有每个的正则表达式。我需要选择其中一个的逻辑。