JSON—JavaScript Object Notation—это вездесущий текстовый формат для обмена структурированными данными. Он стандартизирован как IETF в качестве RFC 8259 , так и Ecma International в качестве ECMA-404, которые вместе определяют компактный, не зависящий от языка синтаксис, лежащий в основе современных API, журналов, конфигураций и баз данных.
Значение JSON — это либо объект, массив, строка, число, либо один из литералов true, false или null; объекты сопоставляют строки со значениями, а массивы содержат упорядоченные значения — с незначительными пробелами, разрешенными вокруг структурных символов (RFC 8259, ECMA-404). Хотя JSON возник из JavaScript, он не зависит от языка и поддерживается практически везде (MDN: JSON). По сети де-факто и рекомендуемой кодировкой является UTF-8 (RFC 8259 §8.1). Для дополнительной безопасности взаимодействия профиль I-JSON (RFC 7493) ужесточает правила в отношении кодировок и числовых диапазонов.
В JavaScript глобальный объект JSON предоставляет два основных инструмента:JSON.parse (с необязательным reviver) и JSON.stringify (с replacer/spacing для красивой печати), как задокументировано на MDN (parse, stringify).
Числовая грамматика JSON является десятичной, но спецификация не предписывает точность или различия между целыми числами и числами с плавающей запятой. Реализации выбирают, как их представлять (RFC 8259 §6). В JavaScript и Node.js Number — это двойная точность IEEE-754, что означает, что только целые числа в диапазоне [−(2^53−1), 2^53−1] являются абсолютно безопасными — см. Number.MAX_SAFE_INTEGER и тип BigInt. Вот почему публичные API часто передают идентификаторы в виде строк и явно проверяют «безопасные целые числа».
По мере развития использования появились стандарты для адресации и изменения JSON на месте. JSON Pointer (RFC 6901) — это крошечный синтаксис с разделителями-косой чертой для поиска значений (например, /a/b/0) с правилами экранирования для ~ и /. JSON Patch (RFC 6902) моделирует частичные обновления как упорядоченные операции (add, remove, replace, move, copy, test) и передается как application/json-patch+json. Д ля более простых различий JSON Merge Patch (RFC 7386) использует слияние в форме документа: существующие поля добавляются/заменяются; установка поля в null удаляет его. Многие фреймворки поддерживают одну или обе формы из коробки.
Сам JSON не имеет схемы, но экосистемы полагаются на схемы для проверки, документации и генерации кода. Семейство JSON Schema 2020-12 определяет ограничения, такие как type, properties, items и ключевые слова композиции, и соответствует OpenAPI 3.1. Для рабочих процессов, ориентированных на генерацию кода, JSON Type Definition (RFC 8927) предлагает намеренно менее выразительный язык, который предсказуемо сопоставляется с основными системами типов.
Классический JSON ожидает один полный текст на полезную нагрузку, что усложняет потоковую передачу журналов и долгоживущих ответов. Помогают два шаблона:
application/json-seq.Когда пропускная способность или скорость доминируют, форматы «двоичного JSON» сохраняют модель данных JSON, обменивая удобочитаемость на эффективность:
Поскольку JSON — это просто текст, большинство рисков связано с тем, как вы его передаете и обрабатываете:
<script> с обратным вызовом) был обходным путем до CORS для междоменных запросов, но опасен — он выполняет произвольный скрипт. Предпочитайте CORS с реальными ответами application/json (OWASP: злоупотребление JSONP).JSON дебютировал в RFC 4627 (2006); зарегистрированный тип носителя — application/json, спецификация которого теперь указывает на RFC 8259. Параметры «charset» в ответах JSON обычно не нужны, потому что UTF-8 является стандартом в общедоступном Интернете.
Разработчики часто хотят комментарии, висячие запятые или строки в одинарных кавычках в конфигурациях. Это выходит за рамки стандартного JSON, но JSON5 предоставляет хорошо документированный надмножество для файлов, редактируемых человеком. Избегайте отправки JSON5 через публичные API, если вы не контролируете обе стороны.
Успех JSON обусловлен небольшой площадью поверхности, широкой поддержкой языков и кольцом смежных стандартов — указателей, исправлений, схем, последовательностей, — которые охватывают грязные реалии распределенных систем. Поймите основы (синтаксис, кодировка, числа), опирайтесь на правильные смежные стандарты, и это будет продолжать приносить дивиденды во всех стеках и сервисах (RFC 8259, ECMA-404, RFC 6901, RFC 6902, RFC 7386, JSON Schema, JTD, RFC 7464, NDJSON).
JSON (JavaScript Object Notation) - это легковесный формат обмена данными, который легко читать и писать людям и легко анализировать и генерировать машинам. Он широко используется для передачи данных в веб-приложениях.
Форматирование JSON делает его читаемым для человека, добавляя правильные отступы и переносы строк. Это особенно полезно при работе с минифицированными или сжатыми данными JSON, отладке или просмотре ответов API.
Валидация JSON проверяет, соответствует ли ваша строка JSON спецификации JSON. Она выявляет синтаксические ошибки, такие как отсутствующие запятые, незакрытые скобки или неправильные кавычки, помогая вам выявлять ошибки на ранних этапах.
Представление кода отображает отформатированный JSON как текст с подсветкой синтаксиса, похоже на то, как он выглядит в редакторе кода. Древовидное представление представляет JSON как интерактивную сворачиваемую структуру, в которой вы можете разворачивать и сворачивать вложенные объекты и массивы.
Да! Все форматирование и валидация JSON происходят полностью в вашем браузере. Ваши данные никогда не покидают ваш компьютер, обеспечивая полную конфиденциальн ость и безопасность.
Да, вы можете загрузить файл JSON, используя кнопку 'Открыть файл'. Инструмент прочитает файл и немедленно отобразит отформатированный результат.
Распространенные ошибки JSON включают: отсутствующие запятые между парами ключ-значение, использование одинарных кавычек вместо двойных для строк, завершающие запятые, незакрытые скобки или фигурные скобки и ключи без кавычек.
Да, используйте кнопку 'Копировать', чтобы скопировать отформатированный JSON в буфер обмена. Это полезно для вставки очищенного JSON в ваш код или документацию.