Walt
Walt

Reputation: 332

JSON Schema - field named "type"

I have an existing JSON data feed between multiple systems which I do not control and cannot change. I have been tasked with writing a schema for this feed. The existing JSON looks in part like this:

 "ids": [
            { "type": "payroll", "value": "011808237" },
            { "type": "geid",  "value":  "31826" }
           ]

When I try to define a JSON schema for this, I wind up with a scrap of schema that looks like this:

"properties": {
    "type": {                   <====================== PROBLEM!!!!
        "type": "string",
        "enum": [ "payroll", "geid" ]
    },
    "value": {
        "type": [ "string", "null" ],
        "pattern": "^[0-9]*$"
    }
}

As you might guess, when the JSON validator hits that "type" on the line marked "PROBLEM!!!" it gets upset and throws an error about how type needs to be a string or array.

Upvotes: 1

Views: 1123

Answers (2)

Walt
Walt

Reputation: 332

I found at least a work-around if not a proper solution. Instead of "type" inside "properties", use "^type$" inside "patternProperties". I.e.

"patternProperties": {
    "^type$": {
        "type": "string"
    }
}

Unfortunately there doesn't seem to be a great way to make "^type$" a required property. I've settled for listing all the other properties as "required" and setting the min and max property counts to the number that should be there.

Upvotes: 0

Ether
Ether

Reputation: 53966

That's a bug in the particular implementation you're using, and should be reported as such. It should be able to handle properties-that-look-like-keywords just fine. In fact, the metaschema (the schema to valid schemas) uses "type" in exactly this way, along with all the other keywords too: e.g. http://json-schema.org/draft-07/schema

I wonder if it is not making use of the official test suite (https://github.com/json-schema-org/JSON-Schema-Test-Suite)?

You didn't indicate what implementation you're using, or what language, but perhaps you can find an alternative one here: https://json-schema.org/implementations.html#validators

Upvotes: 5

Related Questions