【发布时间】:2018-06-12 09:50:04
【问题描述】:
我需要从 JSON-Schema+Data 中获取所需字段的列表。
目前,我们正在使用 AJV 在我们的带有 JSON Schema 的表单中获取错误消息,并且效果很好。
我需要一种方法来获取所有必填字段(即使已填写),以便将带有 * 的字段标记为“必填”。必填字段可能会根据架构和数据组合而变化。
还尝试破解 tv4 以提取必填字段,但未成功。
请帮忙。
此类架构的示例:
{
"type": "object",
"required": [
"checkbox"
],
"properties": {
"checkbox": {
"type": "boolean"
},
"textbox": {
"type": "string"
}
},
"oneOf": [
{
"required": [
"textbox"
],
"properties": {
"checkbox": {
"enum": [
true
]
}
}
},
{
"properties": {
"checkbox": {
"enum": [
false
]
}
}
}
],
"additionalProperties": false
}
【问题讨论】:
-
你的意思是你的架构中有嵌套吗?如果没有,那么模式对象应该有一个
required字段。如果您的架构是嵌套的,您可以使用 ajv 的 'getSchema()' 访问子项,然后检查它返回的内容 - 我认为您仍然可以通过这种方式获取子项的required字段 -
如果一个对象有一个必填字段,并不意味着它一定是活动的。不同的数据可以对字段(分支)给出不同的要求。例如,它的值的组合框决定是否需要另一个字段
-
你能举一个这样的 json 模式的例子吗?我只是好奇你如何在架构中描述它
-
@DanielKhoroshko 添加了。
-
谢谢,我知道了。从技术上讲,您可以针对架构验证一个 ampty 对象,获取所有 ajv 错误对象。每个对象都应该有
.param.required,这对于必填字段来说是正确的。为了得到所有错误,不仅仅是第一个,ajv 有allErrors选项。用户输入一些数据后,可以再次验证架构并根据错误重建一组必填字段。我相信这不是最高效的方式
标签: javascript json jsonschema ajv tv4