# Issues with oneOf properties

**URL:** <https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793>\
**Category:** General\
**Tags:** vue\
**Created:** [November 18, 2025, 3:58am UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793 "2025-11-18T03:58:41Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![SilentArctic](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/silentarctic/32/1331_2.png) [@SilentArctic](https://jsonforms.discourse.group/u/SilentArctic)\
**Post date:** [November 18, 2025, 3:58am UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/1 "2025-11-18T03:58:41Z")

</div>

Hello! I’m having an issue with oneOf groups. It _technically_ works but the console logs this error message as soon as the oneOf is rendered. This happens for every oneOf property, and I’d like to prevent these errors from happening. Any help would be appreciated

```auto
@jsonforms/core: 3.6.0
@jsonforms/vue: 3.6.0
@jsonforms/vue-vanilla: 3.6.0

```

SCHEMA

```json
{
    "type": "array",
    "items": {
      "type": "object",
      "properties": {
         "name": {
            "type": "string"
         },
         "page": {
            "type": "integer"
         },
         "prerequisites": {
            "oneOf": [
               {
                  "title": "True/False",
                  "type": "boolean"
               },
               {
                  "title": "Named Prereqs",
                  "type": "array",
                  "items": {
                     "type": "string"
                  }
               }
            ]
         }
     }
}

```

UI SCHEMA

```json
{
   "type": "VerticalLayout",
   "elements": [
      {
         "type": "Group",
         "label": "Talent",
         "elements": [
            {
               "type": "Control",
               "scope": "#/properties/name"
            },
            {
               "type": "Control",
               "scope": "#/properties/page"
            },
            {
               "type": "Control",
               "scope": "#/properties/prerequisites"
            }
         ]
      }
   ]
}

```

ERROR MESSAGE

```auto
const schema0 = scope.schema[0];const schema1 = scope.schema[1];const schema1 = scope.schema[1];const schema7 = scope.schema[4];const schema7 = scope.schema[4];const schema9 = scope.schema[5];const schema9 = scope.schema[5];const validate1 = scope.validate[0];const validate3 = scope.validate[1];const func0 = scope.func[0];const func0 = scope.func[0];return function validate0(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if((!(data && typeof data == "object" && !Array.isArray(data))) && (typeof data !== "boolean")){const err0 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: schema0.type},message:"must be object,boolean",schema:schema0.type,parentSchema:schema0,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.$id !== undefined){let data0 = data.$id;if(!(typeof data0 === "string")){const err1 = {instancePath:instancePath+"/$id",schemaPath:"#/properties/%24id/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.$id.type,parentSchema:schema0.properties.$id,data:data0};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.$schema !== undefined){let data1 = data.$schema;if(!(typeof data1 === "string")){const err2 = {instancePath:instancePath+"/$schema",schemaPath:"#/properties/%24schema/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.$schema.type,parentSchema:schema0.properties.$schema,data:data1};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.$ref !== undefined){let data2 = data.$ref;if(!(typeof data2 === "string")){const err3 = {instancePath:instancePath+"/$ref",schemaPath:"#/properties/%24ref/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.$ref.type,parentSchema:schema0.properties.$ref,data:data2};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(data.$comment !== undefined){let data3 = data.$comment;if(typeof data3 !== "string"){const err4 = {instancePath:instancePath+"/$comment",schemaPath:"#/properties/%24comment/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.$comment.type,parentSchema:schema0.properties.$comment,data:data3};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.title !== undefined){let data4 = data.title;if(typeof data4 !== "string"){const err5 = {instancePath:instancePath+"/title",schemaPath:"#/properties/title/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.title.type,parentSchema:schema0.properties.title,data:data4};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.description !== undefined){let data5 = data.description;if(typeof data5 !== "string"){const err6 = {instancePath:instancePath+"/description",schemaPath:"#/properties/description/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.description.type,parentSchema:schema0.properties.description,data:data5};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.readOnly !== undefined){let data6 = data.readOnly;if(typeof data6 !== "boolean"){const err7 = {instancePath:instancePath+"/readOnly",schemaPath:"#/properties/readOnly/type",keyword:"type",params:{type: "boolean"},message:"must be boolean",schema:schema0.properties.readOnly.type,parentSchema:schema0.properties.readOnly,data:data6};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.examples !== undefined){let data7 = data.examples;if(!(Array.isArray(data7))){const err8 = {instancePath:instancePath+"/examples",schemaPath:"#/properties/examples/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema0.properties.examples.type,parentSchema:schema0.properties.examples,data:data7};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.multipleOf !== undefined){let data8 = data.multipleOf;if(typeof data8 == "number"){if(data8 <= 0 || isNaN(data8)){const err9 = {instancePath:instancePath+"/multipleOf",schemaPath:"#/properties/multipleOf/exclusiveMinimum",keyword:"exclusiveMinimum",params:{comparison: ">", limit: 0},message:"must be > 0",schema:0,parentSchema:schema0.properties.multipleOf,data:data8};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+"/multipleOf",schemaPath:"#/properties/multipleOf/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema0.properties.multipleOf.type,parentSchema:schema0.properties.multipleOf,data:data8};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}if(data.maximum !== undefined){let data9 = data.maximum;if(!(typeof data9 == "number")){const err11 = {instancePath:instancePath+"/maximum",schemaPath:"#/properties/maximum/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema0.properties.maximum.type,parentSchema:schema0.properties.maximum,data:data9};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.exclusiveMaximum !== undefined){let data10 = data.exclusiveMaximum;if(!(typeof data10 == "number")){const err12 = {instancePath:instancePath+"/exclusiveMaximum",schemaPath:"#/properties/exclusiveMaximum/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema0.properties.exclusiveMaximum.type,parentSchema:schema0.properties.exclusiveMaximum,data:data10};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.minimum !== undefined){let data11 = data.minimum;if(!(typeof data11 == "number")){const err13 = {instancePath:instancePath+"/minimum",schemaPath:"#/properties/minimum/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema0.properties.minimum.type,parentSchema:schema0.properties.minimum,data:data11};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.exclusiveMinimum !== undefined){let data12 = data.exclusiveMinimum;if(!(typeof data12 == "number")){const err14 = {instancePath:instancePath+"/exclusiveMinimum",schemaPath:"#/properties/exclusiveMinimum/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema0.properties.exclusiveMinimum.type,parentSchema:schema0.properties.exclusiveMinimum,data:data12};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}if(data.maxLength !== undefined){let data13 = data.maxLength;if(!((typeof data13 == "number") && (!(data13 % 1) && !isNaN(data13)))){const err15 = {instancePath:instancePath+"/maxLength",schemaPath:"#/definitions/nonNegativeInteger/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema1.type,parentSchema:schema1,data:data13};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(typeof data13 == "number"){if(data13 < 0 || isNaN(data13)){const err16 = {instancePath:instancePath+"/maxLength",schemaPath:"#/definitions/nonNegativeInteger/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0",schema:0,parentSchema:schema1,data:data13};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}}if(data.minLength !== undefined){if(!(validate1(data.minLength, {instancePath:instancePath+"/minLength",parentData:data,parentDataProperty:"minLength",rootData}))){vErrors = vErrors === null ? validate1.errors : vErrors.concat(validate1.errors);errors = vErrors.length;}}if(data.pattern !== undefined){let data15 = data.pattern;if(!(typeof data15 === "string")){const err17 = {instancePath:instancePath+"/pattern",schemaPath:"#/properties/pattern/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.pattern.type,parentSchema:schema0.properties.pattern,data:data15};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.additionalItems !== undefined){if(!(validate0(data.additionalItems, {instancePath:instancePath+"/additionalItems",parentData:data,parentDataProperty:"additionalItems",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.items !== undefined){let data17 = data.items;const _errs35 = errors;let valid2 = false;const _errs36 = errors;if(!(validate0(data17, {instancePath:instancePath+"/items",parentData:data,parentDataProperty:"items",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}var _valid0 = _errs36 === errors;valid2 = valid2 || _valid0;if(!valid2){const _errs37 = errors;if(!(validate3(data17, {instancePath:instancePath+"/items",parentData:data,parentDataProperty:"items",rootData}))){vErrors = vErrors === null ? validate3.errors : vErrors.concat(validate3.errors);errors = vErrors.length;}var _valid0 = _errs37 === errors;valid2 = valid2 || _valid0;}if(!valid2){const err18 = {instancePath:instancePath+"/items",schemaPath:"#/properties/items/anyOf",keyword:"anyOf",params:{},message:"must match a schema in anyOf",schema:schema0.properties.items.anyOf,parentSchema:schema0.properties.items,data:data17};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}else {errors = _errs35;if(vErrors !== null){if(_errs35){vErrors.length = _errs35;}else {vErrors = null;}}}}if(data.maxItems !== undefined){let data18 = data.maxItems;if(!((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18)))){const err19 = {instancePath:instancePath+"/maxItems",schemaPath:"#/definitions/nonNegativeInteger/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema1.type,parentSchema:schema1,data:data18};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}if(typeof data18 == "number"){if(data18 < 0 || isNaN(data18)){const err20 = {instancePath:instancePath+"/maxItems",schemaPath:"#/definitions/nonNegativeInteger/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0",schema:0,parentSchema:schema1,data:data18};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}}if(data.minItems !== undefined){if(!(validate1(data.minItems, {instancePath:instancePath+"/minItems",parentData:data,parentDataProperty:"minItems",rootData}))){vErrors = vErrors === null ? validate1.errors : vErrors.concat(validate1.errors);errors = vErrors.length;}}if(data.uniqueItems !== undefined){let data20 = data.uniqueItems;if(typeof data20 !== "boolean"){const err21 = {instancePath:instancePath+"/uniqueItems",schemaPath:"#/properties/uniqueItems/type",keyword:"type",params:{type: "boolean"},message:"must be boolean",schema:schema0.properties.uniqueItems.type,parentSchema:schema0.properties.uniqueItems,data:data20};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data.contains !== undefined){if(!(validate0(data.contains, {instancePath:instancePath+"/contains",parentData:data,parentDataProperty:"contains",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.maxProperties !== undefined){let data22 = data.maxProperties;if(!((typeof data22 == "number") && (!(data22 % 1) && !isNaN(data22)))){const err22 = {instancePath:instancePath+"/maxProperties",schemaPath:"#/definitions/nonNegativeInteger/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema1.type,parentSchema:schema1,data:data22};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(typeof data22 == "number"){if(data22 < 0 || isNaN(data22)){const err23 = {instancePath:instancePath+"/maxProperties",schemaPath:"#/definitions/nonNegativeInteger/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0",schema:0,parentSchema:schema1,data:data22};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}if(data.minProperties !== undefined){if(!(validate1(data.minProperties, {instancePath:instancePath+"/minProperties",parentData:data,parentDataProperty:"minProperties",rootData}))){vErrors = vErrors === null ? validate1.errors : vErrors.concat(validate1.errors);errors = vErrors.length;}}if(data.required !== undefined){let data24 = data.required;if(Array.isArray(data24)){const len0 = data24.length;for(let i0=0; i0<len0; i0++){let data25 = data24[i0];if(typeof data25 !== "string"){const err24 = {instancePath:instancePath+"/required/" + i0,schemaPath:"#/definitions/stringArray/items/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema7.items.type,parentSchema:schema7.items,data:data25};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}let i1 = data24.length;let j0;if(i1 > 1){const indices0 = {};for(;i1--;){let item0 = data24[i1];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err25 = {instancePath:instancePath+"/required",schemaPath:"#/definitions/stringArray/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)",schema:true,parentSchema:schema7,data:data24};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;break;}indices0[item0] = i1;}}}else {const err26 = {instancePath:instancePath+"/required",schemaPath:"#/definitions/stringArray/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema7.type,parentSchema:schema7,data:data24};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data.additionalProperties !== undefined){if(!(validate0(data.additionalProperties, {instancePath:instancePath+"/additionalProperties",parentData:data,parentDataProperty:"additionalProperties",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.definitions !== undefined){let data27 = data.definitions;if(data27 && typeof data27 == "object" && !Array.isArray(data27)){for(const key0 in data27){if(!(validate0(data27[key0], {instancePath:instancePath+"/definitions/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),parentData:data27,parentDataProperty:key0,rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}}else {const err27 = {instancePath:instancePath+"/definitions",schemaPath:"#/properties/definitions/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema0.properties.definitions.type,parentSchema:schema0.properties.definitions,data:data27};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data.properties !== undefined){let data29 = data.properties;if(data29 && typeof data29 == "object" && !Array.isArray(data29)){for(const key1 in data29){if(!(validate0(data29[key1], {instancePath:instancePath+"/properties/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"),parentData:data29,parentDataProperty:key1,rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}}else {const err28 = {instancePath:instancePath+"/properties",schemaPath:"#/properties/properties/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema0.properties.properties.type,parentSchema:schema0.properties.properties,data:data29};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.patternProperties !== undefined){let data31 = data.patternProperties;if(data31 && typeof data31 == "object" && !Array.isArray(data31)){for(const key2 in data31){const _errs65 = errors;var valid11 = _errs65 === errors;if(!valid11){const err29 = {instancePath:instancePath+"/patternProperties",schemaPath:"#/properties/patternProperties/propertyNames",keyword:"propertyNames",params:{propertyName: key2},message:"property name must be valid",schema:schema0.properties.patternProperties.propertyNames,parentSchema:schema0.properties.patternProperties,data:data31};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}for(const key3 in data31){if(!(validate0(data31[key3], {instancePath:instancePath+"/patternProperties/" + key3.replace(/~/g, "~0").replace(/\//g, "~1"),parentData:data31,parentDataProperty:key3,rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}}else {const err30 = {instancePath:instancePath+"/patternProperties",schemaPath:"#/properties/patternProperties/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema0.properties.patternProperties.type,parentSchema:schema0.properties.patternProperties,data:data31};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}if(data.dependencies !== undefined){let data33 = data.dependencies;if(data33 && typeof data33 == "object" && !Array.isArray(data33)){for(const key4 in data33){let data34 = data33[key4];const _errs72 = errors;let valid14 = false;const _errs73 = errors;if(!(validate0(data34, {instancePath:instancePath+"/dependencies/" + key4.replace(/~/g, "~0").replace(/\//g, "~1"),parentData:data33,parentDataProperty:key4,rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}var _valid1 = _errs73 === errors;valid14 = valid14 || _valid1;if(!valid14){const _errs74 = errors;if(Array.isArray(data34)){const len1 = data34.length;for(let i2=0; i2<len1; i2++){let data35 = data34[i2];if(typeof data35 !== "string"){const err31 = {instancePath:instancePath+"/dependencies/" + key4.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i2,schemaPath:"#/definitions/stringArray/items/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema7.items.type,parentSchema:schema7.items,data:data35};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}let i3 = data34.length;let j1;if(i3 > 1){const indices1 = {};for(;i3--;){let item1 = data34[i3];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err32 = {instancePath:instancePath+"/dependencies/" + key4.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/definitions/stringArray/uniqueItems",keyword:"uniqueItems",params:{i: i3, j: j1},message:"must NOT have duplicate items (items ## "+j1+" and "+i3+" are identical)",schema:true,parentSchema:schema7,data:data34};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;break;}indices1[item1] = i3;}}}else {const err33 = {instancePath:instancePath+"/dependencies/" + key4.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/definitions/stringArray/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema7.type,parentSchema:schema7,data:data34};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}var _valid1 = _errs74 === errors;valid14 = valid14 || _valid1;}if(!valid14){const err34 = {instancePath:instancePath+"/dependencies/" + key4.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/dependencies/additionalProperties/anyOf",keyword:"anyOf",params:{},message:"must match a schema in anyOf",schema:schema0.properties.dependencies.additionalProperties.anyOf,parentSchema:schema0.properties.dependencies.additionalProperties,data:data34};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}else {errors = _errs72;if(vErrors !== null){if(_errs72){vErrors.length = _errs72;}else {vErrors = null;}}}}}else {const err35 = {instancePath:instancePath+"/dependencies",schemaPath:"#/properties/dependencies/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema0.properties.dependencies.type,parentSchema:schema0.properties.dependencies,data:data33};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}if(data.propertyNames !== undefined){if(!(validate0(data.propertyNames, {instancePath:instancePath+"/propertyNames",parentData:data,parentDataProperty:"propertyNames",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.enum !== undefined){let data37 = data.enum;if(Array.isArray(data37)){if(data37.length < 1){const err36 = {instancePath:instancePath+"/enum",schemaPath:"#/properties/enum/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items",schema:1,parentSchema:schema0.properties.enum,data:data37};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}let i4 = data37.length;let j2;if(i4 > 1){outer0:for(;i4--;){for(j2 = i4; j2--;){if(func0(data37[i4], data37[j2])){const err37 = {instancePath:instancePath+"/enum",schemaPath:"#/properties/enum/uniqueItems",keyword:"uniqueItems",params:{i: i4, j: j2},message:"must NOT have duplicate items (items ## "+j2+" and "+i4+" are identical)",schema:true,parentSchema:schema0.properties.enum,data:data37};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;break outer0;}}}}}else {const err38 = {instancePath:instancePath+"/enum",schemaPath:"#/properties/enum/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema0.properties.enum.type,parentSchema:schema0.properties.enum,data:data37};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}if(data.type !== undefined){let data38 = data.type;const _errs83 = errors;let valid20 = false;const _errs84 = errors;if(!(((((((data38 === "array") || (data38 === "boolean")) || (data38 === "integer")) || (data38 === "null")) || (data38 === "number")) || (data38 === "object")) || (data38 === "string"))){const err39 = {instancePath:instancePath+"/type",schemaPath:"#/definitions/simpleTypes/enum",keyword:"enum",params:{allowedValues: schema9.enum},message:"must be equal to one of the allowed values",schema:schema9.enum,parentSchema:schema9,data:data38};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}var _valid2 = _errs84 === errors;valid20 = valid20 || _valid2;if(!valid20){const _errs86 = errors;if(Array.isArray(data38)){if(data38.length < 1){const err40 = {instancePath:instancePath+"/type",schemaPath:"#/properties/type/anyOf/1/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items",schema:1,parentSchema:schema0.properties.type.anyOf[1],data:data38};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}const len2 = data38.length;for(let i5=0; i5<len2; i5++){let data39 = data38[i5];if(!(((((((data39 === "array") || (data39 === "boolean")) || (data39 === "integer")) || (data39 === "null")) || (data39 === "number")) || (data39 === "object")) || (data39 === "string"))){const err41 = {instancePath:instancePath+"/type/" + i5,schemaPath:"#/definitions/simpleTypes/enum",keyword:"enum",params:{allowedValues: schema9.enum},message:"must be equal to one of the allowed values",schema:schema9.enum,parentSchema:schema9,data:data39};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}let i6 = data38.length;let j3;if(i6 > 1){outer1:for(;i6--;){for(j3 = i6; j3--;){if(func0(data38[i6], data38[j3])){const err42 = {instancePath:instancePath+"/type",schemaPath:"#/properties/type/anyOf/1/uniqueItems",keyword:"uniqueItems",params:{i: i6, j: j3},message:"must NOT have duplicate items (items ## "+j3+" and "+i6+" are identical)",schema:true,parentSchema:schema0.properties.type.anyOf[1],data:data38};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;break outer1;}}}}}else {const err43 = {instancePath:instancePath+"/type",schemaPath:"#/properties/type/anyOf/1/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema0.properties.type.anyOf[1].type,parentSchema:schema0.properties.type.anyOf[1],data:data38};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}var _valid2 = _errs86 === errors;valid20 = valid20 || _valid2;}if(!valid20){const err44 = {instancePath:instancePath+"/type",schemaPath:"#/properties/type/anyOf",keyword:"anyOf",params:{},message:"must match a schema in anyOf",schema:schema0.properties.type.anyOf,parentSchema:schema0.properties.type,data:data38};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}else {errors = _errs83;if(vErrors !== null){if(_errs83){vErrors.length = _errs83;}else {vErrors = null;}}}}if(data.format !== undefined){let data40 = data.format;if(typeof data40 !== "string"){const err45 = {instancePath:instancePath+"/format",schemaPath:"#/properties/format/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.format.type,parentSchema:schema0.properties.format,data:data40};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.contentMediaType !== undefined){let data41 = data.contentMediaType;if(typeof data41 !== "string"){const err46 = {instancePath:instancePath+"/contentMediaType",schemaPath:"#/properties/contentMediaType/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.contentMediaType.type,parentSchema:schema0.properties.contentMediaType,data:data41};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}if(data.contentEncoding !== undefined){let data42 = data.contentEncoding;if(typeof data42 !== "string"){const err47 = {instancePath:instancePath+"/contentEncoding",schemaPath:"#/properties/contentEncoding/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema0.properties.contentEncoding.type,parentSchema:schema0.properties.contentEncoding,data:data42};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}}if(data.if !== undefined){if(!(validate0(data.if, {instancePath:instancePath+"/if",parentData:data,parentDataProperty:"if",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.then !== undefined){if(!(validate0(data.then, {instancePath:instancePath+"/then",parentData:data,parentDataProperty:"then",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.else !== undefined){if(!(validate0(data.else, {instancePath:instancePath+"/else",parentData:data,parentDataProperty:"else",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}if(data.allOf !== undefined){if(!(validate3(data.allOf, {instancePath:instancePath+"/allOf",parentData:data,parentDataProperty:"allOf",rootData}))){vErrors = vErrors === null ? validate3.errors : vErrors.concat(validate3.errors);errors = vErrors.length;}}if(data.anyOf !== undefined){if(!(validate3(data.anyOf, {instancePath:instancePath+"/anyOf",parentData:data,parentDataProperty:"anyOf",rootData}))){vErrors = vErrors === null ? validate3.errors : vErrors.concat(validate3.errors);errors = vErrors.length;}}if(data.oneOf !== undefined){if(!(validate3(data.oneOf, {instancePath:instancePath+"/oneOf",parentData:data,parentDataProperty:"oneOf",rootData}))){vErrors = vErrors === null ? validate3.errors : vErrors.concat(validate3.errors);errors = vErrors.length;}}if(data.not !== undefined){if(!(validate0(data.not, {instancePath:instancePath+"/not",parentData:data,parentDataProperty:"not",rootData}))){vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);errors = vErrors.length;}}}validate0.errors = vErrors;return errors === 0;}

```

---

<div class="post-metadata">

**Author:** ![lucas-koehler](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/lucas-koehler/32/336_2.png) [@lucas-koehler](https://jsonforms.discourse.group/u/lucas-koehler)\
**Post date:** [November 18, 2025, 9:38am UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/2 "2025-11-18T09:38:33Z")

</div>

Hi @SilentArctic

Unfortunately, I cannot reproduce the error message in the [JSON Forms Vue Seed](https://github.com/eclipsesource/jsonforms-vue-seed).

Can you provide an example repository or or JSBin or similar where this can be reproduced?

Best regards,  
Lucas

---

<div class="post-metadata">

**Author:** ![SilentArctic](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/silentarctic/32/1331_2.png) [@SilentArctic](https://jsonforms.discourse.group/u/SilentArctic)\
**Post date:** [November 18, 2025, 4:33pm UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/3 "2025-11-18T16:33:58Z")

</div>

Sure, I’ll get on that. If it matters I also have AJV installed independently for other validation purposes, is it possible that could be interfering?

While I’m working out a reproducible demo, I’ve noticed another issue with oneOf. In the example above, the options are a boolean value or an array of strings.

- If I switch from the array to the boolean I am prompted to clear the data in order to proceed.

- If I then switch from the boolean to the array, no prompt happens
  - When I try to add an array value I get a console error
  - `TypeError: array.push is not a function`
  - I have verified that this is because it’s trying to push a new array value onto the old boolean value

I will include this example in my reproduction, but is easy to replicate by copying the data above if you want to take a look before I get mine up.

---

<div class="post-metadata">

**Author:** ![lucas-koehler](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/lucas-koehler/32/336_2.png) [@lucas-koehler](https://jsonforms.discourse.group/u/lucas-koehler)\
**Post date:** [November 24, 2025, 11:57am UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/4 "2025-11-24T11:57:21Z")

</div>

Hi @SilentArctic ,

thanks for working on this.

I am not aware of the independent AJV being a problem but I have also not done it, yet. Is your installed AJV of a compatible version? Otherwise, I could imagine this leading to problems.

The bug with the switch boolean ↔ array I can reproduce. Would you like to open an issue for this at [https://github.com/eclipsesource/jsonforms/issues](https://github.com/eclipsesource/jsonforms/issues) ?

Thanks and best regards,  
Lucas

---

<div class="post-metadata">

**Author:** ![SilentArctic](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/silentarctic/32/1331_2.png) [@SilentArctic](https://jsonforms.discourse.group/u/SilentArctic)\
**Post date:** [November 24, 2025, 5:26pm UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/5 "2025-11-24T17:26:53Z")

</div>

Thanks for looking into the boolean/array problem! I have created an issue.

As for the previous problem, I believe the root cause was a circular reference in my schema (one of my oneOf properties has a $ref to itself for allowing multiple layers of paragraphs). I’d love a built-in way to limit circular reference depth, but for the time being I am intercepting the json-schema-ref-parser deref and replacing the subschema with a simple array of strings. I’ll provide a snippet of my schema below so you have a better view of what I’m working with, but I understand limited circular refs is likely a low priority.

Thanks for your time!

```json
{
"type": "array",
   "items": {
      "oneOf": [
         {
            "title": "String",
            "type": "string"
         },

         {
            "title": "Advanced Text",
            "type": "object",
            "properties": {
               "type": {
                  "type": "string",
                  "enum": [
                     "text",
                     "sidebar",
                     "example",
                     "read-aloud",
                     "codeblock"
                  ]
               },
               "title": {
                  "type": "string"
               },
               "forceTitleLevel": {
                  "type": "integer"
               },
               "page": {
                  "type": "integer"
               },
               "entries": { "$ref": "#" } // this is the problem
            },
            "required": [
               "entries"
            ],
            "additionalProperties": false
         },
      ]
   }
}

```

---

<div class="post-metadata">

**Author:** ![sdirix](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/sdirix/32/1073_2.png) [@sdirix](https://jsonforms.discourse.group/u/sdirix)\
**Post date:** [November 25, 2025, 8:28am UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/6 "2025-11-25T08:28:17Z")

</div>

Hi @SilentArctic,

Did you try JSON Forms without invoking json-schema-ref-parser? I think the schema in question should be supported out of the box.

---

<div class="post-metadata">

**Author:** ![SilentArctic](https://yyz2.discourse-cdn.com/free1/user_avatar/jsonforms.discourse.group/silentarctic/32/1331_2.png) [@SilentArctic](https://jsonforms.discourse.group/u/SilentArctic)\
**Post date:** [December 1, 2025, 12:28am UTC](https://jsonforms.discourse.group/t/issues-with-oneof-properties/2793/7 "2025-12-01T00:28:43Z")

</div>

Hi @sdirix , I have tried loading the schema directly into JsonForms and get this error `Uncaught MissingRefError: can’t resolve reference # from id #`. JsonForms seems unable to handle the # self-reference
