如何用Joi来validation嵌套对象上的string

我的目标是允许一个可以包含任何东西的任意深度的嵌套对象。 在那个嵌套对象中,我只想对string执行额外的validation。

所以,对象可能是这样的:

{ "features": { "feature1": "value1", "feature2": false, "feature3": 321, "feature4": { "something": "else" }, "feature5": ["something", "more"] } 

对于所有的string值我想执行一些额外的validation,但对于其他任何事情,我只是想接受它是有效的。

我只是部分在那里,需要一些帮助处理嵌套对象等。 这是我得到的:

 var providerSchema = Joi.object().keys({ features: Joi.object().pattern(/^/, Joi.alternatives() .when(Joi.ref('features'), { is: Joi.string(), then: validateBlacklist(['<', '>']), otherwise: Joi.any() })) }); function validateBlacklist(list) { let regex = new RegExp(`^(?:(?!${list.join('|')}).)*$`); return Joi.string().regex(regex) .options({language: { string: { regex: { base: 'contains an invalid character'}}}}); } 

问题1:alternatives()。when()仅接受string当前,在要素对象中只接受string 。 似乎alternative()。when()部分工作不正常。 我试图检查引用是否是一个string; 如果是,则通过validateBlaclist()执行额外的validation,否则接受它。

问题2:不支持嵌套对象我的validation不支持对象内的对象。 这个嵌套需要支持任意深度,因为这个特性对象可以包含任何东西。

有谁知道该去哪里? 任何帮助将不胜感激。

谢谢。