0

Is it possible to get a list of all additionalProperties found by json-schema ?

For example, if my schema looks like this :

{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
    },
    "lastName": {
      "type": "string",
    },
    "age": {
      "type": "integer"
    }
  }
}

And data loooks like this :

{
  "firstName": "John",
  "lastName": "Doe",
  "age": 21,
  "extraField": "some new data I was not expecting",
  "anotherExtraField": "another unexpected data point"
}

In this case, instead of an exception from json-schema because of additionalProperties: false, I want a list in return, like : [extraField, anotherExtraField]

1 Answer 1

1

If you're using an implementation that supports 2019-09 or 2020-12 with annotations, you're in luck! additionalProperties should produce an annotation result of the properties it validates (spec).

If you add additionalProperties: true, then all extra properties pass and are validated by the keyword, which means those extra properties should be listed in the annotation result.

{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    },
    "lastName": {
      "type": "string"
    },
    "age": {
      "type": "integer"
    }
  },
  "additionalProperties": true
}

This yields (in the Detailed output format)

{
  "valid": true,
  "keywordLocation": "#",
  "instanceLocation": "#",
  "annotations": [
    {
      "valid": true,
      "keywordLocation": "#/properties",
      "instanceLocation": "#",
      "annotation": [
        "firstName",
        "lastName",
        "age"
      ]
    },
    {
      "valid": true,
      "keywordLocation": "#/additionalProperties",
      "instanceLocation": "#",
      "annotation": [
        "extraField",
        "anotherExtraField"
      ]
    }
  ]
}

You can try it on https://json-everything.net, which is powered by my validator, JsonSchema.Net.

If you're not using .Net, you can browse the implementations page for other libraries. Some of them may also support annotations, but I'm not sure which do.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.