JSON Configuration for Application Questions
Last updated: 10 October 2025
Introduction
The recognition citizen-facing web page prompts users to complete a series of questions to submit an application for recognition by Ofqual. These questions are configured via a JSON record stored in a database table. This document outlines the required JSON structure to surface a question.
This pattern is likely suitable for use in task-list type scenarios, where users are asked to complete a series of tasks containing sets of questions.
Structure Overview
The JSON consists of three primary objects:
body[array] – Configures question text and description.sidebar[object] – Adds contextual sidebar content.formGroup[object] – Controls answer input type and validation.
Body
The body array defines the main layout and text for each question. It can contain multiple objects with the following structure:
Common Field
type[string] – Type of content. Valid values:Button– Clickable button with actionheading– Section headinglist– Bullet point listparagraph– Paragraph text (each in its own object)
Type-Specific Fields
type: Button
buttonContent[object]formAction[string] – Action to perform on clickname[string] – Button nametext[string] – Button display text
type: heading
headingContent[object]text[string] – Heading textsize[string] – Text size
type: list
listContent[object]items[array]size[string] – Text sizestyle[string] – Only"bulleted"is accepted
type: paragraph
paragraphContent[object]text[string] – Paragraph textsize[string] – Text size
Sidebar
The sidebar object provides additional context such as definitions or links.
Structure
help[object]links[array]text[string] – Link texturl[string] – Link URL
content[array]type[string] – Valid values:heading,paragraphheadingContent[object] (iftype: heading)text[string]size[string]
paragraphContent[object] (iftype: paragraph)text[string]size[string]
FormGroup
Controls how users input answers. Each input type has a specific structure.
CheckBox
CheckboxGroup[object]heading[object]text[string]size[string]
validation[object]required[boolean]
options[array]label[string]value[string]conditionalInputs[array]label[string]name[string]inputType[string] – Valid:textdisabled[boolean]validation[object]
Radio Button
RadioButtonGroup[object]heading[object]text[string]size[string]
hint[string]name[string]options[array]label[string]validation[object]
Text Input
TextInputGroup[object]sectionName[string]fields[array]disabled[boolean]hint[string]label[string]name[string]validation[object]
Text Area
Textarea[object]hint[string]label[object]text[string]size[string]
name[string]rows[number]spellCheck[boolean]validation[object]
File Upload
fileUpload[object]allowMultiple[boolean]label[object]size[string]text[string]
name[string]validation[object]
Validation
If validation is required, the following fields may be included:
validation[object]required[boolean] - Is question mandatorymaxLength[number] - Maximum number of accepted wordsminLength[number] - Minimum number of accepted wordinLength[number]pattern[string] – Matches specified patternvalidationLabel[string] - Custom text to appear in validation not metunique[boolean] - Check if another application has previously submitted this valuecountWords[boolean] - Display word counter
Size
Valid values for text size:
s– Smallm– Mediuml– Largexl– Extra Large