MAGAZING
MAGAZING

Reputation: 3

Json schema validation for object which may have two forms

I'm trying to figure out how to validate a JSON object which may have 2 forms.

for examples when there is no data available, the JSON could be

{
  "student": {}
}

when there is data available, the JSON could be

{
  "student":{
  "id":"someid",
  "name":"some name",
  "age":15
 }
}

I wrote the JSON schema in this way, but it seems not working

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://json-schema.org/draft-07/schema#",
    "title": "JSON schema validation",
    "properties": {
        "student": {
            "type": "object",
            "oneOf": [
                {
                    "required": [],
                    "properties": {}
                },
                {
                    "required": [
                        "id",
                        "name",
                        "age"
                    ],
                    "properties": {
                        "id": {
                            "$id": "#/properties/student/id",
                            "type": [
                                "string",
                                "null"
                            ]
                        },
                        "name": {
                            "$id": "#/properties/student/name",
                            "type": [
                                "string",
                                "null"
                            ]
                        },
                        "age": {
                            "$id": "#/properties/student/age",
                            "type": [
                                "number"
                            ]
                        }
                    }
                }
            ]
        }
    }
}

I was wondering is there a way to validate it. Thank you!

Upvotes: 0

Views: 128

Answers (1)

Relequestual
Relequestual

Reputation: 12355

An empty properties object, and an empty required object, do nothing.

JSON Schema is constraints based, in that if you don't explicitly constrain what is allowed, then it is allowed by default.

You're close, but not quite. The const keyword can take any value, and is what you want in your first item of allOf. You can test the following schema here: https://jsonschema.dev/s/Kz1C0

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "https://example.com/myawesomeschema",
  "title": "JSON schema validation",
  "properties": {
    "student": {
      "type": "object",
      "oneOf": [
        {
          "const": {}
        },
        {
          "required": [
            "id",
            "name",
            "age"
          ],
          "properties": {
            "id": {
              "type": [
                "string",
                "null"
              ]
            },
            "name": {
              "type": [
                "string",
                "null"
              ]
            },
            "age": {
              "type": [
                "number"
              ]
            }
          }
        }
      ]
    }
  }
}

Upvotes: 1

Related Questions