Mark_Sagecy
Mark_Sagecy

Reputation: 350

JSON Schema object properties defined by enum

I'm attempting to reuse an enum in my JSON Schema to define the properties for an object.

I was wondering if the following is correct.

JSON Schema

{
  "type": "object",
  "propertyNames": {
    "enum": ["Foo","Bar"]
  },
  "patternProperties": {
    ".*": {
      "type": "number"
    }
  }
}

JSON Data

{
    "Foo": 123,
    "Bar": 456
}

The reason I ask is that I get inconsistent results from JSON Schema validation libraries. Some indicate the JSON validates, while others indicate the JSON is invalid.

p.s. if anyone is wondering "why" I'm trying to define the properties with an enum, it is because the enum is shared in various parts of my json schema. In some cases it is a constraint on a string, but I need the identical set of possible values both on those string properties and also on the object properties. As an enum I can maintain the set of possible values in one place.

Upvotes: 3

Views: 3031

Answers (1)

Ether
Ether

Reputation: 53996

Yes, that's a valid JSON Schema. You could also express it like this:

{
  "type": "object",
  "propertyNames": {
    "enum": ["Foo","Bar"]
  },
  "additionalProperties": {
    "type": "number"
  }
}

It says "all property names must conform to this schema: (one of these values listed in the enum); also, all property values must conform to this schema: (must be numeric type)."

What errors do you get from the implementations that report this as invalid? Those implementations have a bug; would you consider reporting it to them?

Upvotes: 4

Related Questions