Каковы ключевые особенности формата JSON?

Ответ

JSON (JavaScript Object Notation) — это текстовый формат обмена данными, основанный на синтаксисе объектов JavaScript. Его основные особенности:

1. Ограниченный набор типов данных: JSON поддерживает только 6 типов:

  • Строки: "текст в двойных кавычках"
  • Числа: 42, 3.14, -10
  • Булевы значения: true, false
  • null: null
  • Массивы: Упорядоченные списки в квадратных скобках [1, 2, "три"]
  • Объекты: Неупорядоченные наборы пар «ключ-значение» в фигурных скобках {"ключ": "значение"}

2. Строгий синтаксис:

  • Все ключи в объектах обязательно должны быть строками в двойных кавычках.
  • Запятые и двоеточия расставляются строго по правилам.
  • Не допускаются завершающие запятые в массивах и объектах (хотя многие современные парсеры их игнорируют).

3. Отсутствие расширенных возможностей:

  • Нет комментариев (стандарт их не предусматривает).
  • Нет функций, дат, undefined — эти типы должны быть сериализованы в строки или числа.
  • Нет циклических ссылок — объект не может ссылаться сам на себя.

4. Кодировка и читаемость:

  • Использует кодировку Unicode (по умолчанию UTF-8).
  • Формат легко читается человеком и машиной.

Пример валидного JSON:

{
  "name": "Alice",
  "active": true,
  "score": 95.5,
  "tags": ["backend", "qa"],
  "profile": {
    "role": "engineer",
    "level": null
  }
}

Практическое следствие: При передаче сложных структур (например, дат) необходимо согласовывать их строковое или числовое представление между клиентом и сервером.

Ответ 18+ 🔞

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

Представь, что тебе надо передать данные из точки А в точку Б, но так, чтобы и человек глянул — понял, и машина прочитала — не сломалась. Вот для этого и придумали эту, блядь, JavaScript Object Notation. Основано на синтаксисе объектов из JS, но, сука, сильно урезанное, как бюджет в кризис.

Первое, что надо запомнить — там типов данных овердохуища? Нихуя! Всего шесть, блядь:

  • Строки: Только в двойных кавычках, "как вот так". Одинарные — нахуй.
  • Числа: 42, 3.14, -10. Всё.
  • Булевы значения: true и false. Не True, не 1, не да, ёпта.
  • null: Просто null. Не nil, не None, не undefined — нихуя! null и всё.
  • Массивы: Упорядоченный список в квадратных скобках: [1, 2, "три", false].
  • Объекты: Набор пар «ключ-значение» в фигурных скобках: {"имя": "Вася", "возраст": 30}.

Второе — синтаксис строгий, как у твоей бабки-училки. Забудешь кавычку — получишь ошибку парсинга и пиздец всему процессу.

  • Ключи в объектах — только строки в двойных кавычках. {name: "Петя"} — это пизда, а не JSON. Должно быть {"name": "Петя"}.
  • Запятые и двоеточия — святое. Поставил лишнюю запятую в конце массива — в старых парсерах получишь волнение ебать, хотя новые уже не такие привередливые.
  • Комментариев, блядь, нет! Вообще. Хочешь пояснить что-то — пиши отдельным полем "_comment": "тут был Вася", но это уже костыль, сука.

Третье — чего там НЕТ, и это всех бесит.

  • Функций нет. Вообще. Не пытайся запихнуть.
  • Даты нет. new Date() — это тебе не JSON. Придётся или в строку превращать ("2023-10-27"), или в число (таймстамп).
  • undefined нет. Только null, блядь.
  • Циклических ссылок нет. Объект не может ссылаться сам на себя, иначе парсер сойдёт с ума и накроется медным тазом.

Четвёртое — зато читабельно и в UTF-8. Человек посмотрел — вроде понятно, машина прочитала — обработала.

Вот тебе пример, как это выглядит, когда всё по правилам:

{
  "name": "Alice",
  "active": true,
  "score": 95.5,
  "tags": ["backend", "qa"],
  "profile": {
    "role": "engineer",
    "level": null
  }
}

А практический вывод, блядь, какой? Если тебе надо передать что-то сложнее, чем строка или число — договаривайся заранее, как это представлять. С датами — особенно. Один пишет как строку ISO, другой ждёт таймстамп в миллисекундах — и получается пиздопроебибна на стыке систем. Всё, вопросов нет?