Вебсправочник
Ваш первый сайт

Урок: измерить размер JSON до отправки

Число символов в поле не равно размеру готового JSON-тела. В этом уроке вы измерите сериализованную строку в байтах UTF-8, включая имена ключей, кавычки и экранирование.

Назначение

Число символов в поле не равно размеру готового JSON-тела. В этом уроке вы измерите сериализованную строку в байтах UTF-8, включая имена ключей, кавычки и экранирование.

Как это работает

Сначала выполните JSON.stringify, затем кодирование TextEncoder. Пример не отправляет данные. Используются только учебные значения, чтобы не раскрывать персональную информацию в консоли.

Пример

const payload = {title:"Урок", note:"Строка 1" + String.fromCharCode(10) + "Строка 2"};
const body = JSON.stringify(payload);
const bytes = new TextEncoder().encode(body);
console.log({body, codeUnits:body.length, utf8Bytes:bytes.byteLength});

Что должно получиться

Размер учитывает весь сериализованный документ. Перевод строки представлен JSON-экранированием, а кириллица занимает несколько байтов UTF-8. Значения length и byteLength поэтому могут отличаться.

Граница применения и частая ошибка

Результат не включает HTTP-заголовки, сетевые накладные расходы и возможное сжатие. Лимит сервера может относиться к другой стадии обработки. Не заменяйте такой оценкой серверное ограничение размера и не логируйте рабочие токены вместе с телом.

Самостоятельная проверка

Сравните короткое латинское название, кириллицу и эмодзи. Добавьте вложенный массив и посмотрите рост тела. Уточните, ограничивает ваш сервер байты запроса, распакованный размер или конкретные поля.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.