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

How to Validate JSON in TypeScript

How to Validate JSON in TypeScript

Validating JSON data is a crucial step in ensuring the integrity and reliability of your application. In this guide, we will explore how to validate JSON in TypeScript, covering the basics, common edge cases, and performance tips.

Quick Example

Here is a minimal example of how to validate JSON in TypeScript using the json-schema package:

import { validate } from 'json-schema';

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

const jsonData = '{"name": "John", "age": 30}';

const result = validate(jsonData, schema);

if (result.valid) {
  console.log('JSON is valid');
} else {
  console.log('JSON is invalid:', result.errors);
}

To use this code, install the json-schema package by running npm install json-schema or yarn add json-schema.

Step-by-Step Breakdown

Let's walk through the code line by line:

  • import { validate } from 'json-schema';: We import the validate function from the json-schema package, which will be used to validate our JSON data.
  • const schema = { ... };: We define a JSON schema that describes the structure of the JSON data we want to validate. In this example, we require an object with two properties: name (a string) and age (an integer).
  • const jsonData = '{"name": "John", "age": 30}';: We define the JSON data we want to validate.
  • const result = validate(jsonData, schema);: We call the validate function, passing in the JSON data and the schema. The function returns a result object with a valid property indicating whether the data is valid, and an errors property containing any error messages.
  • if (result.valid) { ... }: We check if the data is valid. If it is, we log a success message. If not, we log an error message with the details of the errors.

Handling Edge Cases

Empty/Null Input

If the input JSON data is empty or null, the validate function will return an error. To handle this case, you can add a simple null check before calling the validate function:

if (!jsonData) {
  console.log('JSON data is empty or null');
  return;
}

Invalid Input

If the input JSON data is invalid (e.g., not a string), the validate function will throw an error. To handle this case, you can wrap the validate function call in a try-catch block:

try {
  const result = validate(jsonData, schema);
  // ...
} catch (error) {
  console.log('Invalid JSON data:', error);
}

Large Input

If the input JSON data is very large, the validate function may take a long time to complete. To handle this case, you can use a streaming JSON parser, such as json-stream-parser, which can validate JSON data in chunks:

import { JsonStreamParser } from 'json-stream-parser';

const parser = new JsonStreamParser(schema);

parser.on('data', (chunk) => {
  // Process the chunk
});

parser.on('end', () => {
  console.log('JSON data is valid');
});

parser.write(jsonData);
parser.end();

Unicode/Special Characters

If the input JSON data contains Unicode or special characters, the validate function may not handle them correctly. To handle this case, you can use a library like json-unicode, which provides a Unicode-aware JSON parser:

import { parse } from 'json-unicode';

const jsonData = parse(jsonData, schema);

Common Mistakes

1. Not Handling Errors

One common mistake is not handling errors properly. For example:

const result = validate(jsonData, schema);
if (result.valid) {
  console.log('JSON is valid');
}

This code will throw an error if the validate function returns an error. To fix this, add a try-catch block:

try {
  const result = validate(jsonData, schema);
  if (result.valid) {
    console.log('JSON is valid');
  }
} catch (error) {
  console.log('Error validating JSON:', error);
}

2. Not Validating Schema

Another common mistake is not validating the schema itself. For example:

const schema = { type: 'object' };
const jsonData = '{"name": "John", "age": 30}';
const result = validate(jsonData, schema);

This code will not catch any errors in the schema. To fix this, add a schema validation step:

const schema = { type: 'object' };
const schemaResult = validate(schema, {
  type: 'object',
  properties: {
    type: { type: 'string' }
  }
});
if (!schemaResult.valid) {
  console.log('Schema is invalid:', schemaResult.errors);
  return;
}
const jsonData = '{"name": "John", "age": 30}';
const result = validate(jsonData, schema);

3. Not Handling Null or Undefined Values

A third common mistake is not handling null or undefined values in the schema. For example:

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' }
  }
};
const jsonData = '{"name": null}';
const result = validate(jsonData, schema);

This code will not catch the null value. To fix this, add a null check to the schema:

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', nullable: true }
  }
};
const jsonData = '{"name": null}';
const result = validate(jsonData, schema);

Performance Tips

1. Use a Streaming JSON Parser

Using a streaming JSON parser, such as json-stream-parser, can significantly improve performance when dealing with large JSON data.

2. Use a Cache

Caching the validation result can improve performance when validating the same JSON data multiple times.

3. Optimize the Schema

Optimizing the schema can improve performance by reducing the number of validation checks.

FAQ

Q: What is the difference between json-schema and json-validator?

A: json-schema is a package for validating JSON data against a schema, while json-validator is a package for validating JSON data against a set of rules.

Q: Can I use json-schema with TypeScript?

A: Yes, json-schema is fully compatible with TypeScript.

Q: How do I handle errors in the validate function?

A: You can handle errors by wrapping the validate function call in a try-catch block.

Q: Can I use json-schema with large JSON data?

A: Yes, json-schema can handle large JSON data, but you may need to use a streaming JSON parser for optimal performance.

Q: How do I validate JSON data against a schema that contains Unicode characters?

A: You can use a library like json-unicode to validate JSON data against a schema that contains Unicode characters.

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