Что такое JSON и каковы его основные правила синтаксиса?

«Что такое JSON и каковы его основные правила синтаксиса?» — вопрос из категории Форматы данных, который задают на 34% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JSON (JavaScript Object Notation) — это легковесный текстовый формат для обмена структурированными данными, основанный на синтаксисе объектов JavaScript. Он независим от языка и широко используется в API, конфигурационных файлах и для хранения данных.

Основные синтаксические правила:

  1. Данные — это пары «ключ: значение».
  2. Ключи всегда должны быть строками, заключенными в двойные кавычки (").
  3. Значения могут быть:
    • Строкой (в двойных кавычках): "Hello"
    • Числом (целым или с плавающей точкой): 42, 3.14
    • Логическим значением: true, false
    • null: null
    • Массивом (упорядоченный список в квадратных скобках []): [1, 2, 3]
    • Объектом (набор пар ключ-значение в фигурных скобках {}): {"key": "value"}
  4. Данные разделяются запятыми (,).
  5. Пробелы (пробел, табуляция, перенос строки) между элементами игнорируются парсерами.

Пример корректного JSON:

{
  "user": {
    "id": 1,
    "name": "Alice",
    "isActive": true,
    "skills": ["QA", "Automation", "API Testing"],
    "projects": [
      {"id": 101, "title": "Web App"},
      {"id": 102, "title": "Mobile App"}
    ],
    "metadata": null
  }
}

Чем JSON отличается от XML?

  • JSON менее многословен, проще для чтения и парсинга, напрямую отображается в структуры данных языков программирования (объекты, словари, списки).
  • XML поддерживает комментарии, пространства имён, более сложную валидацию через схемы (XSD), но более «тяжелый».

Работа с JSON в Python:

import json

# Сериализация Python-объекта в JSON-строку
data = {"name": "Alice", "age": 30}
json_string = json.dumps(data, indent=2)  # indent для красивого форматирования
print(json_string)

# Десериализация JSON-строки в Python-объект
parsed_data = json.loads(json_string)
print(parsed_data["name"])  # Alice

# Чтение из файла и запись в файл
with open('data.json', 'r') as f:
    data_from_file = json.load(f)

with open('output.json', 'w') as f:
    json.dump(data_from_file, f, indent=4)