Skip to content

toJsonSchema array fields conversion. Should items be an object? #493

@kolyasya

Description

@kolyasya

I'm trying to build up a client-side form with https://github.com/rjsf-team/react-jsonschema-form
To do so I'm using SimplSchema → JSON Schema conversion.

And for array fields I noticed that I don't get a proper result.
This issue mostly refers to this line —

items: [itemSchema],

If I start with such schema:

const animals = new SimpleSchema({
  animals: { type: Array },
  'animals.$': { type: Object },
  'animals.$.label': { type: String },
});

I get a JSONSchema:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "animals": {
      "type": "array",
      "items": [
        {
          "type": "object",
          "properties": {
            "label": {
              "type": "string"
            }
          },
          "required": ["label"],
          "additionalProperties": false
        }
      ],
      "additionalItems": false
    }
  },
  "required": ["animals"],
  "additionalProperties": false
}

And if I use this JSON schema directly with formData:

{
  "animals": [
    {
      "label": "Cat"
    },
    {
      "label": "Dog"
    },
    {
      "label": "Whale"
    }
  ]
}

I get only a single item:
image

This is because items of the same shape should be defined as an object, not array:
https://json-schema.org/learn/getting-started-step-by-step#optional

Am I thinking about that wrong or is this a bug?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions