Перейти к содержимому

Конвертер Объект JSON в Сериализованный объект PHP

Легко сериализуйте и десериализуйте данные в PHP с помощью нашего универсального инструмента PHP сериализации и десериализации. Эта онлайн-утилита подойдет разработчикам, которым нужно преобразовывать сложные структуры данных в строки для хранения, а затем восстанавливать их в исходном виде. Обрабатывайте данные точно и эффективно без установки программ. Упростите рабочий процесс разработки на PHP с помощью этого удобного и надежного инструмента.

Что делает PHP Serializer

PHP Serializer преобразует JSON в строковый формат serialize() из PHP и преобразует сериализованные строки обратно в форматированный JSON. В сериализованной форме длина строк считается в байтах, поэтому значение с буквами с диакритическими знаками имеет большую длину, чем количество символов в нём.

Десериализация никогда не создаёт объекты ваших классов: вместо этого объект возвращается как __PHP_Incomplete_Class, а имя его класса сохраняется в __PHP_Incomplete_Class_Name. Это не позволяет недоверенным входным данным запускать код. Объекты JSON преобразуются в PHP массивы со строковыми ключами.

Примеры с решениями

JSON в сериализованную строку

a:4 — это массив из четырёх элементов, и длина каждой строки указана в байтах.

Ввод
{"name": "Ada", "age": 36, "admin": true, "tags": ["php", "json"]}
Результат
a:4:{s:4:"name";s:3:"Ada";s:3:"age";i:36;s:5:"admin";b:1;s:4:"tags";a:2:{i:0;s:3:"php";i:1;s:4:"json";}}

Сериализованная строка в JSON

В слове Zürich 6 букв, но 7 байтов в UTF-8, поэтому его длина равна s:7.

Ввод
a:2:{s:4:"city";s:7:"Zürich";s:3:"zip";s:4:"8001";}
Результат
{
  "city": "Zürich",
  "zip": "8001"
}

Сериализованный объект

Объект не восстанавливается как настоящий экземпляр stdClass. Его имя класса и свойства показаны как данные.

Ввод
O:8:"stdClass":1:{s:2:"id";i:7;}
Результат
{
  "__PHP_Incomplete_Class_Name": "stdClass",
  "id": 7
}

Коды сериализованных типов

КодТипПример
Nнулевое значениеN;
bЛогическое значение: 1 для true и 0 для falseb:1;
iЦелое числоi:36;
dЧисло с плавающей точкойd:0.5;
sСтрока с длиной в байтахs:3:"PHP";
aМассив с количеством элементов и парами ключ—значениеa:1:{i:0;s:1:"x";}
OОбъект с длиной и именем класса, а также количеством его свойствO:8:"stdClass":0:{}

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

Как сериализовать данные в PHP?

Чтобы сериализовать данные в PHP, введите структуру данных (массив, объект или скалярное значение) в соответствующее поле и нажмите кнопку «Serialize». Инструмент преобразует сложные структуры данных в строковый формат для хранения, используя протокол сериализации PHP. Полученное представление можно сохранить в файле или базе данных либо передать по сети.

Как десериализовать данные в PHP?

Чтобы десериализовать данные в PHP, введите сериализованную строку (обычно она начинается с обозначений формата, например a:, s: или O:) в соответствующее поле и нажмите кнопку «Deserialize». Инструмент восстановит исходную структуру данных, включая массивы, объекты и значения.

Почему сериализация полезна в PHP?

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

Какие типы данных можно сериализовать в PHP?

PHP сериализует строки, целые числа, числа с плавающей точкой, логические значения, массивы, объекты и значения NULL. При этом сохраняются ключи массивов, свойства объектов (public, protected, private), вложенные структуры и типы данных. Однако ресурсы, например подключения к базам данных или файловые дескрипторы, сериализовать нельзя — для них нужна особая обработка.

Существуют ли какие-либо соображения безопасности при десериализации данных?

Да, при десериализации недоверенных данных возможны атаки с внедрением объектов PHP. Злоумышленники могут создавать вредоносные сериализованные строки, которые запускают код через магические методы (__wakeup, __destruct). Никогда не десериализуйте пользовательский ввод или внешние данные без проверки. Для недоверенных данных используйте JSON или задайте ограничение allowed_classes.

Можно ли сериализовать и десериализовать пользовательские объекты?

Да, PHP сериализует пользовательские объекты, сохраняя все свойства и их значения. Чтобы правильно восстановить объекты, перед десериализацией необходимо загрузить определения классов. Используйте автозагрузку, подключите файлы классов или реализуйте магические методы __sleep() и __wakeup() для настройки сериализации.

Чем отличаются serialize() и JSON?

PHP serialize() сохраняет точные типы данных, приватные и защищенные свойства, а также сведения о классе объекта, но работает только в PHP. JSON не зависит от языка, удобен для чтения и веба, работает в любых языках, но не сохраняет приватные свойства и точные типы PHP. Используйте serialize() для хранения только в PHP, а JSON — для API и совместимости между системами.

Как сериализовать данные сеанса?

PHP автоматически сериализует данные сеанса ($_SESSION) для хранения между запросами. Когда вы сохраняете в сеансе массивы или объекты, PHP записывает их в файлы или базы данных, а при последующей загрузке страницы десериализует. Это позволяет сохранять состояние пользователя, содержимое корзины и данные аутентификации между посещениями страниц.

Можно ли хранить сериализованные данные в базах данных?

Да, сериализованные данные можно хранить в столбцах базы данных типа TEXT или BLOB. Однако такой формат не позволяет эффективно выполнять запросы, индексировать и искать данные. Используйте сериализацию для хранения целых объектов как отдельных единиц, а для запросов к отдельным полям и связям между данными предпочитайте JSON или нормализованные таблицы.

Как выглядят сериализованные данные PHP?

Сериализованные данные имеют префиксы формата: s:5:"hello" (строка), i:42 (целое число), a:2:{...} (массив), O:4:"User" (объект). Числа обозначают длину или количество элементов. Формат компактен, но его трудно читать. Используйте наш инструмент, чтобы преобразовывать сериализованные данные в формате PHP в удобный для чтения JSON и обратно для отладки и обработки данных.

Как отладить сериализованные данные?

Десериализуйте данные, чтобы проверить их структуру, используйте print_r() или var_dump() для десериализованных значений, преобразуйте в JSON для удобства чтения, проверьте неполную сериализацию или повреждения, проверьте доступность классов для объектов, а также используйте наш инструмент для визуализации и понимания сложных сериализованных структур.

Можно ли сериализовать закрытые или анонимные функции?

Стандартная сериализация PHP не поддерживает замыкания. Для этого используйте пакеты, например Opis Closure или SerializableClosure из Laravel. Обычные функции и методы объектов можно сериализовать, если они определены в классах, а анонимные функции требуют специальной обработки.

Что такое магические методы сериализации?

__sleep() вызывается перед сериализацией и возвращает массив свойств для сериализации (это удобно, если нужно исключить некоторые данные). __wakeup() вызывается после десериализации для инициализации. __serialize() и __unserialize() (начиная с PHP 7.4) дают больше контроля. Реализуйте эти методы в классах, чтобы настроить сериализацию.

Как перейти от сериализованных данных к JSON?

Десериализуйте существующие данные PHP и преобразуйте их в массивы или объекты stdClass, затем закодируйте с помощью JSON. Обновите код, заменив serialize()/unserialize() на json_encode()/json_decode(). JSON безопаснее, удобнее для чтения и совместимее, но при этом не сохраняются приватные свойства и точные типы, которые сохраняет сериализация.

О проекте OneClick Pro

OneClick Pro — это бесплатная коллекция из более чем 150 веб-инструментов для повседневных задач: преобразования изображений и единиц измерения, форматирования и проверки кода, проверки доменов и SEO, а также работы с текстом, датами и числами. Все инструменты доступны без регистрации и подписки, а введенные вами данные используются только для расчета результата и никогда не сохраняются. Используйте коллекцию как быстрый набор инструментов для разовых задач или добавьте в закладки те, которыми пользуетесь каждый день.