Try it yourself with our free Json Validator tool — runs entirely in your browser, no signup needed.

How to Validate JSON for Form Validation

How to validate JSON for Form Validation

Form validation is a critical aspect of any web application, ensuring that user input conforms to expected formats and constraints. One common approach is to validate JSON data against a predefined schema. This article will explore how to validate JSON for form validation, providing practical examples and best practices for implementing this approach in your applications.

Quick Example

Here's a minimal example using the popular ajv library in JavaScript:

import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' }
  },
  required: ['name', 'age']
};

const data = {
  name: 'John Doe',
  age: 'twenty-five'
};

const valid = ajv.validate(schema, data);
if (!valid) {
  console.log(ajv.errors);
}

To use this example, install ajv using npm: npm install ajv.

Real-World Scenarios

Scenario 1: User Registration Form

Suppose we have a user registration form with fields for email, password, and phone number. We want to ensure that the email is in a valid format and the password meets certain complexity requirements.

const schema = {
  type: 'object',
  properties: {
    email: { type: 'string', format: 'email' },
    password: { type: 'string', pattern: '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,}$' },
    phone: { type: 'string', pattern: '^\\d{3}-\\d{3}-\\d{4}$' }
  },
  required: ['email', 'password', 'phone']
};

Scenario 2: Product Information Form

Imagine a form for entering product information, including a title, description, and price. We want to ensure that the price is a positive number.

const schema = {
  type: 'object',
  properties: {
    title: { type: 'string' },
    description: { type: 'string' },
    price: { type: 'number', minimum: 0 }
  },
  required: ['title', 'description', 'price']
};

Scenario 3: Address Form

Suppose we have a form for entering address information, including street, city, state, and zip code. We want to ensure that the zip code is in a valid format.

const schema = {
  type: 'object',
  properties: {
    street: { type: 'string' },
    city: { type: 'string' },
    state: { type: 'string' },
    zip: { type: 'string', pattern: '^[0-9]{5}(?:-[0-9]{4})?$' }
  },
  required: ['street', 'city', 'state', 'zip']
};

Scenario 4: Nested Object Form

Imagine a form with a nested object, such as a user with multiple addresses. We want to ensure that each address has a valid street, city, state, and zip code.

const schema = {
  type: 'object',
  properties: {
    user: {
      type: 'object',
      properties: {
        name: { type: 'string' },
        addresses: {
          type: 'array',
          items: {
            type: 'object',
            properties: {
              street: { type: 'string' },
              city: { type: 'string' },
              state: { type: 'string' },
              zip: { type: 'string', pattern: '^[0-9]{5}(?:-[0-9]{4})?$' }
            },
            required: ['street', 'city', 'state', 'zip']
          }
        }
      },
      required: ['name', 'addresses']
    }
  }
};

Best Practices

  1. Define a clear schema: Establish a well-defined schema for your JSON data to ensure that your validation rules are consistent and accurate.
  2. Use a reputable validation library: Choose a well-maintained and widely-used validation library, such as ajv, to simplify the validation process and minimize errors.
  3. Test thoroughly: Thoroughly test your validation rules to ensure that they cover all possible scenarios and edge cases.
  4. Keep it simple: Avoid overly complex validation rules, which can lead to performance issues and maintenance headaches.
  5. Use validation for security: Use validation to prevent common web application vulnerabilities, such as SQL injection and cross-site scripting (XSS).

Common Mistakes

Mistake 1: Failing to define required properties

// Wrong
const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' }
  }
};

// Corrected
const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' }
  },
  required: ['name', 'age']
};

Mistake 2: Using incorrect data types

// Wrong
const schema = {
  type: 'object',
  properties: {
    age: { type: 'string' }
  }
};

// Corrected
const schema = {
  type: 'object',
  properties: {
    age: { type: 'integer' }
  }
};

Mistake 3: Failing to validate nested objects

// Wrong
const schema = {
  type: 'object',
  properties: {
    user: { type: 'object' }
  }
};

// Corrected
const schema = {
  type: 'object',
  properties: {
    user: {
      type: 'object',
      properties: {
        name: { type: 'string' },
        addresses: {
          type: 'array',
          items: {
            type: 'object',
            properties: {
              street: { type: 'string' },
              city: { type: 'string' },
              state: { type: 'string' },
              zip: { type: 'string', pattern: '^[0-9]{5}(?:-[0-9]{4})?$' }
            },
            required: ['street', 'city', 'state', 'zip']
          }
        }
      },
      required: ['name', 'addresses']
    }
  }
};

FAQ

Q: What is the difference between ajv and other validation libraries?

A: ajv is a fast and lightweight validation library that supports JSON Schema draft-07 and draft-2019-09. It is widely used and well-maintained.

Q: How do I validate a JSON array?

A: You can validate a JSON array by defining an items property in your schema, which specifies the type and constraints for each item in the array.

Q: Can I use ajv with TypeScript?

A: Yes, ajv is compatible with TypeScript. You can use the ajv type definitions to get type safety and auto-completion in your TypeScript projects.

Q: How do I handle validation errors?

A: You can handle validation errors by checking the errors property of the ajv instance after calling validate(). This property contains an array of error objects, each describing a specific validation error.

Q: Can I use ajv for security validation?

A: Yes, ajv can be used for security validation to prevent common web application vulnerabilities, such as SQL injection and cross-site scripting (XSS).

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp