How to specify a property as null or a reference?

viblo picture viblo · May 19, 2014 · Viewed 13.2k times · Source

I have a json document in which a part can be either null or a subobject, like this:

[{
    "owner":null    
},
{
    "owner":{
        "id":1
    }   
}]

The question is if its possible to model this in json schema draft v4 using ref?

What I would like is something like this

{
    "type":"object",
    "properties":{
        "owner":{
            "type":["null", "object"],
            "$ref":"#/definitions/id"
        }
    },
    "definitions":{
        "id":{
            "type":"object",
            "properties":{
                "id":{
                    "type":"number"
                }
            }
        } 
    }
}

Answer

cloudfeet picture cloudfeet · May 19, 2014

What you've posted should work, if you remove the "type":"object" from the definition.

However, a neater, more explicit way to specify alternatives is to use oneOf. You can keep your "id" definition untouched, and just use:

    "owner":{
        "oneOf": [
            {"type": "null"},
            {"$ref":"#/definitions/id"}
        ]
    }