RJSF中嵌套oneOf的JSON Schema验证异常问题求助
RJSF内层oneOf切换时验证异常及数据丢失问题
使用react-jsonschema-forms(RJSF)框架渲染如下JSON Schema时,切换内层oneOf中的XXXType与YYYYType选项会出现两类异常:
- 切换至YYYYType时,表单提示不匹配任一schema,且错误要求必填属性'name';
- 切回XXXType时,原有JSON元素丢失,导致验证失败。
已尝试调整RJSF配置、使用if判别逻辑,但问题仍未解决。
问题涉及的JSON Schema
{ "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "XXXType": { "title": "XXXX", "type": "object", "properties": { "sourceType": { "type": "string", "enum": [ "Xxxxx" ], "default": "Xxxxx" }, "folioInstrumentFilter": { "type": "array", "items": { "type": "string" } }, "folios": { "type": "array", "items": { "type": "integer" } }, "xxxxxTradeIds": { "type": "array", "items": { "type": "integer" } } }, "additionalProperties": false, "required": [ "sourceType" ] }, "YYYYType": { "title": "YYYY", "type": "object", "properties": { "instrumentTypes": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "books": { "type": "array", "items": { "type": "string" } }, "tradeLegIds": { "type": "array", "items": { "type": "integer" } } }, "required": [ "instrumentTypes" ], "additionalProperties": false } }, "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 50 }, "portfolio": { "type": "object", "oneOf": [ { "properties": { "name": { "type": "string", "enum": [ "Name 1", "Name 2", "Name 3", "Name 4" ] } }, "required": [ "name" ] }, { "type": "object", "properties": { "custom": { "oneOf": [ { "$ref": "#/definitions/XXXType" }, { "$ref": "#/definitions/YYYYType" } ] } }, "required": [ "custom" ] } ] } }, "required": [ "portfolio", "name" ], "additionalProperties": false }
复现步骤
- 选择Option 1后切换至XXXType,生成的JSON正确且验证通过;
- 切换至YYYYType,触发验证错误;
- 切回XXXType,JSON元素丢失,验证失败。
内容的提问来源于stack exchange,提问作者Mohammed Abu Sharikh
相关产品推荐
相关产品推荐

