Octopus.Script exported 2022-06-02 by cramoscr belongs to ‘JSON’ category.
Validates the consistency of an input JSON object against provided JSON schema
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
JSON input object
vJsonData =
JSON object to be validates
Ejem:
{
"name" : "John",
"age" : 45
}
Schema
vSchema =
JSON object called schema, who defines the layout of the JSON input object
{
"type":"object",
"properties":{
"name":{
"type":"string",
"minimum":1
},
"age":{
"type":"number",
"minimum":1
}
},
"additionalProperties":false,
"required":[
"name",
"age"
]
}
Script body
Steps based on this template will execute the following Python script.
import json
from jsonschema import validate
def validateJSON(jsonData):
try:
#jsonData must be STRING type
json.loads(jsonData)
except Exception as e:
#print(str(e))
#print(e.message)
return str(e)
return None
def validateSchema(jsonData, jsonSchema):
try:
validate(instance=json.loads(jsonData), schema=json.loads(jsonSchema))
except Exception as e:
#print(e.message)
#print(str(e))
return e.message
return None
vSchema = get_octopusvariable("vSchema")
vJsonData = get_octopusvariable("vJsonData")
vError = validateJSON(vJsonData)
if vError == None:
vRslt = 'Correct!'
print('JSON Structure is valid !','\n')
if vSchema:
vError = validateSchema(vJsonData, vSchema)
if vError == None:
vRslt = 'Correct!'
print('JSON Schema is valid !','\n')
else:
vRslt = 'Wrong !'
print('JSON Schema error:', vError, file=sys.stderr)
else:
vRslt = 'Wrong!'
print('JSON structure error:', vError, file=sys.stderr)
print ('Result:', vRslt)
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "7f4f6d86-50aa-43b1-be7b-f0ab27e4a0ac",
"Name": "JSON - Validate object",
"Description": "Validates the consistency of an input JSON object against provided JSON schema",
"Version": 1,
"ExportedAt": "2022-06-02T19:54:24.484Z",
"ActionType": "Octopus.Script",
"Author": "cramoscr",
"Packages": [],
"Parameters": [
{
"Id": "1905df72-1da7-446b-8857-4df1795fb19a",
"Name": "vJsonData",
"Label": "JSON input object",
"HelpText": "JSON object to be validates\n\nEjem:\n\n```\n{\n \"name\" : \"John\",\n \"age\" : 45\n}\n```",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "MultiLineText"
}
},
{
"Id": "3089fe56-964f-4d5f-b940-31ca81e358cb",
"Name": "vSchema",
"Label": "Schema",
"HelpText": "JSON object called schema, who defines the layout of the JSON input object\n\n```\n{\n \"type\":\"object\",\n \"properties\":{\n \"name\":{\n \"type\":\"string\",\n \"minimum\":1\n },\n \"age\":{\n \"type\":\"number\",\n \"minimum\":1\n }\n },\n \"additionalProperties\":false,\n \"required\":[\n \"name\",\n \"age\"\n ]\n}\n```",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "MultiLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "Python",
"Octopus.Action.Script.ScriptBody": "import json\nfrom jsonschema import validate\n\ndef validateJSON(jsonData):\n try:\n #jsonData must be STRING type\n json.loads(jsonData)\n except Exception as e:\n #print(str(e))\n #print(e.message)\n return str(e)\n return None\n\ndef validateSchema(jsonData, jsonSchema):\n try:\n validate(instance=json.loads(jsonData), schema=json.loads(jsonSchema))\n except Exception as e:\n #print(e.message)\n #print(str(e))\n return e.message\n return None\n\nvSchema = get_octopusvariable(\"vSchema\")\nvJsonData = get_octopusvariable(\"vJsonData\")\n\nvError = validateJSON(vJsonData)\nif vError == None:\n vRslt = 'Correct!'\n print('JSON Structure is valid !','\\n')\n\n if vSchema:\n vError = validateSchema(vJsonData, vSchema)\n if vError == None:\n vRslt = 'Correct!'\n print('JSON Schema is valid !','\\n')\n else:\n vRslt = 'Wrong !' \n print('JSON Schema error:', vError, file=sys.stderr)\nelse:\n vRslt = 'Wrong!'\n print('JSON structure error:', vError, file=sys.stderr)\n\nprint ('Result:', vRslt)"
},
"Category": "JSON",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/json-validate-format-and-schema.json",
"Website": "/step-templates/7f4f6d86-50aa-43b1-be7b-f0ab27e4a0ac",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Thursday, June 2, 2022