Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

31 Commits

Repository files navigation

Go JSON Schema Reflection

Build StatusGitter chatGo Report Card

This package can be used to generate JSON Schemas from Go types through reflection.

It supports arbitrarily complex types, including interface{}, maps, slices, etc.

Example

The following Go type:

typeTestUserstruct {
IDint`json:"id"`Namestring`json:"name"`Friends []int`json:"friends,omitempty"`Tagsmap[string]interface{} `json:"tags,omitempty"`BirthDate time.Time`json:"birth_date,omitempty"`
}

Results in following JSON Schema:

jsonschema.Reflect(&TestUser{})
{
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/TestUser",
"definitions": {
"TestUser": {
"type": "object",
"properties": {
"birth_date": {
"type": "string",
"format": "date-time"
},
"friends": {
"type": "array",
"items": {
"type": "integer"
}
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"tags": {
"type": "object",
"patternProperties": {
".*": {
"type": "object",
"additionalProperties": true
}
}
}
},
"additionalProperties": false,
"required": ["id", "name"]
}
}
}

Configurable behaviour

The behaviour of the schema generator can be altered with parameters when a jsonschema.Reflector instance is created.

ExpandedStruct

If set to true, makes the top level struct not to reference itself in the definitions. But type passed should be a struct type.

eg.

typeGrandfatherTypestruct {
FamilyNamestring`json:"family_name" jsonschema:"required"`
}
typeSomeBaseTypestruct {
SomeBasePropertyint`json:"some_base_property"`// The jsonschema required tag is nonsensical for private and ignored properties.// Their presence here tests that the fields *will not* be required in the output// schema, even if they are tagged required.somePrivateBasePropertystring`json:"i_am_private" jsonschema:"required"`SomeIgnoredBasePropertystring`json:"-" jsonschema:"required"`SomeUntaggedBasePropertybool`jsonschema:"required"`someUnexportedUntaggedBasePropertyboolGrandfatherGrandfatherType`json:"grand"`
}

will output:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"required": [
"some_base_property",
"grand",
"SomeUntaggedBaseProperty"
],
"properties": {
"SomeUntaggedBaseProperty": {
"type": "boolean"
},
"grand": {
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/GrandfatherType"
},
"some_base_property": {
"type": "integer"
}
},
"type": "object",
"definitions": {
"GrandfatherType": {
"required": [
"family_name"
],
"properties": {
"family_name": {
"type": "string"
}
},
"additionalProperties": false,
"type": "object"
}
}
}

About

Generate JSON Schemas from Go types

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages