SYNOPSIS
use JSON::Schema::Shorthand;
my $schema = js_shorthand({
object => { foo => 'number', bar => { type => 'string', required => 1 }
});
# $schema is
# {
# type => 'object',
# properties => {
# foo => { type => 'number' },
# bar => { type => string },
# }
# required => [ 'bar' ],
# }
DESCRIPTION
JSON Schema is a useful beast, but its schema definition can be a
little bit more long-winded than necessary. This module allows to use a
few shortcuts that will be expanded into their canonical form.
CAVEAT: the module is still very young, and there are plenty of
properties this module should expand and does not. So don't trust it
blindly. If you hit such a case, raise a ticket and I'll refine the
process.
js_shorthand
my $schema = js_shorthand $shorthand;
The module exports a single function, js_shorthand, that takes in a
JSON schema in shorthand notation and returns the expanded, canonical
schema form.
If you don't like the name js_shorthand, you can always import it under
a different name in your namespace.
use JSON::Schema::Shorthand 'js_shorthand' => { -as => 'expand_json_schema' };
...;
my $schema = expand_json_schema $shorthand;
Types as string
If a string type is encountered where a property definition is
expected, the string is expanded to the object { "type": type }.
{
"foo": "number",
"bar": "string"
}
expands to
{
"foo": { "type": "number" },
"bar": { "type": "string" }
}
If the string begins with a #, the type is assumed to be a reference
and #type is expanded to { "$ref": type }.
{ "foo": "#/definitions/bar" }
becomes
{ "foo": { "$ref": "#/definitions/bar" } }
object property
{ object: properties } expands to { type: "object", properties }.
shorthand expanded
------------------------ ---------------------------
foo: { foo: {
object: { type: "object",
bar: { } properties: {
} bar: { }
} }
}
array property
{ array: items } expands to { type: "array", items }.
shorthand expanded
------------------------ ---------------------------
foo: { foo: {
array: 'number' type: "array",
} items: {
type: 'number'
}
}
required property
If the required attribute is set to true for a property, it is bubbled
up to the required attribute of its parent object.
shorthand expanded
------------------------ ---------------------------
foo: { foo: {
properties: { required: [ 'bar' ],
bar: { required: true }, properties: {
baz: { } bar: {},
} baz: {}
} }
SEE ALSO
* JSON Schema specs -
http://json-schema.org/
* JavaScript version of this module -
http://github.com/yanick/json-shema-shorthand
POD ERRORS
Hey! The above document had some coding errors, which are explained
below:
Around line 49:
Unknown directive: =head2Shorthands