ToolHub
View All Posts

Как валидировать JSON: полное руководство с примерами

JSON (JavaScript Object Notation) является краеугольным камнем современных веб-API, конфигурационных файлов и обмена данными. Но невалидный JSON может привести к сбою приложений, нарушению интеграции API и часам отладки. Это руководство проведёт вас через всё, что вам нужно знать о валидации JSON, от базовых проверок синтаксиса до продвинутой валидации Schema с реальными примерами.

Почему важна валидация JSON

Невалидный JSON — один из самых распространённых источников ошибок в веб-приложениях. Одна не на месте запятая, ключ без кавычек или завершающая запятая могут привести к тому, что JSON.parse() выбросит SyntaxError, обрушив весь конвейер данных. Валидация выявляет эти ошибки на ранних этапах, прежде чем они распространятся по системе и вызовут сбои в downstream.

Помимо синтаксической корректности, валидация также гарантирует, что JSON-данные соответствуют ожидаемой структуре. API может вернуть валидный JSON, но с отсутствующими обязательными полями, неправильными типами данных или значениями вне допустимого диапазона. Валидация Schema решает эти структурные проблемы.

Правила синтаксиса JSON

Прежде чем углубляться в инструменты валидации, важно понять правила, которые делают JSON валидным. JSON имеет строгий синтаксис, определённый RFC 8259, и даже одно нарушение символа делает весь документ невалидным.

Строки должны использовать двойные кавычки

Все строковые значения и ключи объектов должны быть заключены в двойные кавычки. Одинарные кавычки не являются допустимыми разделителями строк JSON — это распространённая ошибка разработчиков, переходящих с JavaScript.

// Invalid - single quotes
{'name': 'Alice', 'age': 30}

// Valid - double quotes
{"name": "Alice", "age": 30}

Ключи объектов должны быть в кавычках

В отличие от объектных литералов JavaScript, JSON требует, чтобы все ключи объектов были заключены в двойные кавычки. Ключи без кавычек являются синтаксической ошибкой.

// Invalid - unquoted keys
{name: "Alice", age: 30}

// Valid - quoted keys
{"name": "Alice", "age": 30}

Завершающие запятые запрещены

JSON не разрешает запятые после последнего элемента в объекте или массиве. Это ещё одна распространённая ошибка, особенно при ручном редактировании JSON.

// Invalid - trailing comma
{
  "name": "Alice",
  "age": 30,
}

// Valid - no trailing comma
{
  "name": "Alice",
  "age": 30
}

Комментарии не поддерживаются

JSON не поддерживает комментарии. Ни // однострочные, ни /* */ многострочные комментарии не являются допустимыми в JSON. Если вам нужна документация, используйте отдельные файлы или форматы, такие как JSONC.

Распространённые ошибки валидации JSON

Понимание самых распространённых ошибок помогает быстро их выявлять и исправлять. Вот ошибки, с которыми вы столкнётесь чаще всего:

Валидация JSON в JavaScript

Самый простой способ валидации JSON в JavaScript — обернуть JSON.parse() в блок try-catch. Если JSON невалиден, метод выбрасывает SyntaxError.

function validateJSON(jsonString) {
  try {
    JSON.parse(jsonString);
    return { valid: true };
  } catch (error) {
    return {
      valid: false,
      error: error.message
    };
  }
}

const result = validateJSON('{"name": "Alice"}');
console.log(result);
// { valid: true }

const badResult = validateJSON("{'name': 'Alice'}");
console.log(badResult);
// { valid: false, error: "Unexpected token '..." }

Валидация JSON в Python

Python предоставляет модуль json с json.loads() для парсинга JSON-строк. Как и в JavaScript, невалидный JSON вызывает json.JSONDecodeError с подробной информацией о позиции.

import json

def validate_json(json_string):
    try:
        json.loads(json_string)
        return {"valid": True}
    except json.JSONDecodeError as e:
        return {
            "valid": False,
            "error": str(e),
            "line": e.lineno,
            "column": e.colno
        }

result = validate_json('{"name": "Alice"}')
print(result)
# {'valid': True}

Валидация JSON Schema

Синтаксическая валидация говорит только о том, правильно ли сформирован JSON. JSON Schema позволяет определить ожидаемую структуру и проверить данные по ней. Schema указывает обязательные поля, типы данных, диапазоны значений, строковые шаблоны и структуры вложенных объектов.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0 }
  }
}

Популярные валидаторы JSON Schema включают Ajv для JavaScript, jsonschema для Python и json-schema-validator для Java. Эти библиотеки проверяют JSON-данные по вашей Schema и генерируют подробные сообщения об ошибках для каждого нарушения.

Онлайн-инструменты валидации JSON

Когда вам нужно быстро проверить JSON-документ без написания кода, онлайн-валидаторы — самый быстрый вариант. Они предоставляют мгновенную обратную связь с подсветкой ошибок и номерами строк.

Попробуйте ToolHub JSON Validator для мгновенной проверки ваших JSON-данных. Он предоставляет подробные сообщения об ошибках с номерами строк и столбцов, валидацию в реальном времени при вводе и форматирование в один клик.

Лучшие практики валидации JSON

Готовы проверить ваши JSON-данные? Попробуйте наш бесплатный онлайн-валидатор JSON с мгновенным обнаружением ошибок и подробной обратной связью.

Валидировать JSON сейчас

Часто задаваемые вопросы

Что такое валидация JSON?

Валидация JSON — это процесс проверки, соответствует ли JSON-документ правилам корректного синтаксиса и, опционально, определённой Schema. Синтаксическая валидация гарантирует, что JSON правильно сформирован, а валидация Schema гарантирует, что структура данных соответствует ожидаемым типам, обязательным полям и ограничениям значений.

Какие самые распространённые ошибки JSON?

Самые распространённые ошибки JSON включают: завершающие запятые после последнего элемента, использование одинарных кавычек вместо двойных, ключи объектов без кавычек, комментарии (не разрешены в JSON) и значения undefined или NaN. Эти ошибки приводят к тому, что JSON.parse() выбрасывает SyntaxError.

Как валидировать JSON в JavaScript?

Используйте JSON.parse(), обёрнутый в блок try-catch. Если JSON невалиден, JSON.parse() выбрасывает SyntaxError, который вы можете перехватить и обработать. Для валидации Schema используйте библиотеки, такие как Ajv, которые реализуют валидацию JSON Schema.

Что такое JSON Schema?

JSON Schema — это словарь, позволяющий аннотировать и валидировать JSON-документы. Он определяет ожидаемую структуру, типы, обязательные поля, диапазоны значений, строковые шаблоны и структуры вложенных объектов. Вы можете использовать его для проверки соответствия JSON-данных определённому формату помимо базовой синтаксической корректности.

Можно ли валидировать JSON онлайн?

Да, онлайн-инструменты валидации JSON, такие как ToolHub JSON Validator, позволяют вставить JSON-данные и мгновенно увидеть, валидны ли они, с подробными сообщениями об ошибках, показывающими точную строку и столбец, где произошла ошибка.