{ "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json", "webJobName": "myjob-dev", "startTime": "2015-01-15T00:00:00+01:00", "endTime": "2015-01-16T00:00:00+01:00", "jobRecurrenceFrequency": "Day", "interval": 1, "runMode": "Scheduled" }
Following the link to the JSON schema file shows you what it looks like:
{ "title": "JSON schema for Azure Webjobs configuration files", "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "required": [ "runMode" ], "definitions": { "shared": { "properties": { "webJobName": { "type": "string", "description": "The name of the Azure Webjob." }, "startTime": { "type": "string", "format": "date-time", "description": "The start time of a scheduled job. Example. 2014-06-11T00:00:00-08:00" }, "endTime": { "type": "string", "format": "date-time", "description": "The end time of a scheduled job. Example. 2014-06-12T00:00:00-08:00" }, "jobRecurrenceFrequency": { "type": "string", "enum": [ "Second", "Minute", "Hour", "Day", "Week", "Month" ], "description": "The frequency metric used with the 'interval' property." }, "interval": { "type": "integer", "description": "The interval of how often the Azure Webjob should run. Use it with the 'intervalType' property." } } }, "scheduled": { "required": [ "webJobName", "startTime", "endTime", "jobRecurrenceFrequency", "interval" ], "allOf": [ { "$ref": "#/definitions/shared" } ], "properties": { "runMode": { "type": "string", "enum": [ "Scheduled" ], "description": "Determines the run mode of the Azure Webjob. \n\n Triggered: manually triggered \n Scheduled: runs on a specific schedule \n Continuous: runs all the time" } } }, "notScheduled": { "required": [ "runMode" ], "allOf": [ { "$ref": "#/definitions/shared" } ], "properties": { "runMode": { "type": "string", "enum": [ "Continuous", "OnDemand" ], "description": "Determines the run mode of the Azure Webjob. \n\n Triggered: manually triggered \n Scheduled: runs on a specific schedule \n Continuous: runs all the time" } } } }, "oneOf": [ { "$ref": "#/definitions/scheduled" }, { "$ref": "#/definitions/notScheduled" } ] }So - JSON Schema for JSON is what XSD is for XML: you define a schema in which you define what information must or can be present inside an element.
I have to say I'm not sure what my position is on this. I'm a strong believer in 'the right tool for the job'. So if you want to write a textfile with information but want to enforce a schema - shouldn't you just use XML? XML with an XSD solved this problem.
You want to send data back and forth between a webserver and a client, without a lot of hassle and overhead and which works great with JavaScript ? Use JSON. JavaScript lets you get away with everything - so does JSON.
Don't get me wrong - I like all the developments in software and this surely adds to something. JSON configuration files wouldn't be possible in a product like Visual Studio if not for a schema. But one should not be affraid of it's dynamic nature and therefore make everything strongly typed. Embrace the dynamic nature of JavaScript and JSON or pick a different tool IMHO.
Anyway - I played around with it a bit and here are some interesting resources:
- The site with all JSON Schema draft specs: http://json-schema.org/documentation.html
- JSON Schema validator: https://json-schema-validator.herokuapp.com/
- Great website with information: http://spacetelescope.github.io/understanding-json-schema/structuring.html
So here's my attempt at a schema:
{ "definitions":{ "car":{ "title":"Car schema", "type":"object", "properties":{ "make":{ "description":"The manufacturer of the car", "type":"string" }, "model":{ "description":"The model of the car", "type":"string" } }, "required":[ "make", "model" ] }, "person":{ "title":"Person schema", "type":"object", "properties":{ "firstName":{ "description":"The firstname of the person", "type":"string" }, "lastName":{ "description":"The family name of the person", "type":"string" }, "cars":{ "type" : "array", "items" : [ { "$ref":"#\/definitions\/car" } ] } }, "required":[ "firstName", "lastName", "cars" ] } }, "$ref":"#\/definitions\/person" }
Which validates this JSON:
{ "firstName" : "John", "lastName" : "Doe", "cars" : [ { "make" : "Ford", "model" : "T" }, { "make" : "Ford", "model" : "Galaxy" } ] }
Note the $ref thing - makes everything nice and structured. Other than that it's all pretty straight forward.
We're going to see a whole lot more of JSON schema in the future I think - so you might as well read up on it!
We're going to see a whole lot more of JSON schema in the future I think - so you might as well read up on it!
No comments:
Post a Comment